注意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
代码替换为不使用全局变量的版本:)