注意JavaScript大师:需要一手setInterval()

时间:2010-06-16 01:10:43

标签: javascript jquery setinterval

我正在尝试为房地产商店橱窗制作非交互式显示器。

我玩setInterval()已经有一段时间了。

我的脚本第一次执行,很好。但当它试图通过getNextProperty()获取下一个属性时,它开始变得混乱。如果您有Firebug或等效输出console.log(),您会看到它正在调用不应该的东西!

现在有一些JavaScript,所以我觉得链接比发布它更好。

Store Display

Offending JavaScript

值得一提的是我所有的DOM / AJAX都是用jQuery完成的。

我尽力确保clearInterval()正常工作,而且似乎没有运行下面的任何代码。

setInterval()用于预加载下一张图片,然后在图库中显示。当间隔检测到我们处于最后一个图像((nextListItem.length === 0))时,它意味着清除该间隔并从一个新属性重新开始。

现在已经让我疯了一段时间了,所以任何人都能帮助我吗?

这可能是非常明显的事情!

非常感谢!

更新

好吧,现在我觉得更好的是我知道问题是我天真地假设插件可以开箱即用。

我确实从an answer on Stack Overflow获得了这个插件。我已经提醒了这个问题的作者。

感谢您的所有答案!

1 个答案:

答案 0 :(得分:3)

这是你的问题所在:

jQuery.extend(jQuery, {
  imagesToLoad: 0,

问题是这个变量是全局/共享的(jQuery.imagesToLoad),所以稍后再检查:

if(jQuery.loadedImages.length >= jQuery.imagesToLoad){

取决于此插件不会同时被调用两次,否则如果检查发生了问题,那么您将在稍后的代码中调用它:

$.preloadImages({
  urls: [nextImage],

该计数降至1,使if评估为true不仅仅是最后一张图像,而是第一张图像之后的所有图像(由于回调运行时,它会及时重叠),这导致complete回调触发多次次,而不只是一次,所以这段代码:

$.preloadImages({
 urls: preloadImages,
 complete: function() { showProperty(property); }
});

...看到complete函数正在运行多次次,因此您同时启动多个时间间隔(这就是为什么您会看到{ {1}}在日志中执行了这么多次。

简短修复:将console.log('show property called' + property.slug)代码替换为不使用全局变量的版本:)