JavaScript专家注意:需要带setInterval()的帮助

前端之家收集整理的这篇文章主要介绍了JavaScript专家注意:需要带setInterval()的帮助 前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

自从我玩过setInterval()已经有一段时间了.

我的脚本第一次执行时就很好.但是,当它尝试通过getNextProperty()获取下一个属性时,它开始陷入困境.如果您有Firebug或console.log()的等效输出,您会看到它正在调用不应执行的操作!

现在有相当多的JavaScript,因此与发布所有链接相比,链接到它会更好.

Store Display

Offending JavaScript

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

我已尽力确保clearInterval()正常运行,并且似乎未在其下运行任何代码.

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

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

这可能真的很明显!

非常感谢!

更新资料

好吧,现在我更好地知道问题是我天真的以为插件可以开箱即用.

我确实从an answer on Stack Overflow得到了这个插件.我已经向作者提了这个问题.

感谢您的所有回答!

最佳答案
这是您的问题区域:

jQuery.extend(jQuery,{
  imagesToLoad: 0,

问题在于此变量是全局/共享的(jQuery.imagesToLoad),因此稍后进行检查:

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

取决于此插件是否不能同时被调用两次,否则,如果check失败,则是因为您稍后将在代码调用插件

$.preloadImages({
  urls: [nextImage],

该计数下降到1,这使得if不仅在最后一个图像上,而且在第一个图像之后的所有图像在第一个图像之后都设置为true(由于回调运行时,它在时间上重叠),从而导致完整的回调可以触发很多次,而不仅仅是一次,所以代码如下:

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

…看到该完整功能多次运行,因此您同时启动了多个间隔(这就是为什么您看到console.log(‘show property named’property.slug)在日志中执行了很多次的原因).

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

猜你在找的jQuery相关文章