我正在尝试为房地产商店橱窗制作非交互式显示器。
我玩setInterval()
已经有一段时间了。
我的脚本第一次执行,很好。但当它试图通过getNextProperty()
获取下一个属性时,它开始变得混乱。如果您有Firebug或等效输出console.log()
,您会看到它正在调用不应该的东西!
现在有一些JavaScript,所以我觉得链接比发布它更好。
值得一提的是我所有的DOM / AJAX都是用jQuery完成的。
我尽力确保clearInterval()
正常工作,而且似乎没有运行下面的任何代码。
setInterval()
用于预加载下一张图片,然后在图库中显示。当间隔检测到我们处于最后一个图像((nextListItem.length === 0)
)时,它意味着清除该间隔并从一个新属性重新开始。
现在已经让我疯了一段时间了,所以任何人都能帮助我吗?
这可能是非常明显的事情!
非常感谢!
好吧,现在我觉得更好的是我知道问题是我天真地假设插件可以开箱即用。
我确实从an answer on Stack Overflow获得了这个插件。我已经提醒了这个问题的作者。
感谢您的所有答案!
答案 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)
代码替换为不使用全局变量的版本:)