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

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

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

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

现在有一些JavaScript,所以我会感觉更好地链接到它而不是发布它。

商店展示

违反JavaScript

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

我已经尽力确保clearInterval()正常工作,并且它似乎没有在它下面运行任何代码。

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

它已经让我坚持了一段时间,所以任何人都能帮助我吗?

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

非常感谢!

更新

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

我从Stack Overflow的答案中得到了这个插件。 我已经提醒了这个问题的作者。

谢谢你的所有答案!

这是你的问题领域:

 jQuery.extend(jQuery, { imagesToLoad: 0, 

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

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

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

 $.preloadImages({ urls: [nextImage], 

该计数降至1,使得if不仅在最后一个图像上评估为true ,而是在第一个图像之后的第一个in集合之后的所有图像(由于回调运行时,它在时间上重叠),这导致complete回调多次开火,而不仅仅是一次,所以这段代码:

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

…看到complete函数运行了很多次,所以你同时开始多个间隔(这就是为什么你看到console.log('show property called' + property.slug)在日志中执行了这么多次) 。

简短修复:将preloadImages代码替换为不使用全局变量的版本:)