在Internet Explorer中执行两次JavaScript/jQuery间隔
我在jQuery中创建了一个小的fadeIn/fadeOut旋转木马,目前为止,它在我测试过的所有符合标准的浏览器中都运行良好;除了Internet Explorer 9 使用在Internet Explorer中执行两次JavaScript/jQuery间隔,javascript,jquery,internet-explorer,internet-explorer-9,setinterval,Javascript,Jquery,Internet Explorer,Internet Explorer 9,Setinterval,我在jQuery中创建了一个小的fadeIn/fadeOut旋转木马,目前为止,它在我测试过的所有符合标准的浏览器中都运行良好;除了Internet Explorer 9 使用setInterval将旋转木马设置为每15000毫秒滚动到下一个项目,它还使用窗口。addEventListener在聚焦到窗口外时将其暂停 当我在InternetExplorer9中测试它时,我注意到每个间隔每次执行两次,因此它不是切换到下一个项目然后等待15秒(就像在其他浏览器中发生的那样),而是在等待下一个间隔之前
setInterval
将旋转木马设置为每15000毫秒滚动到下一个项目,它还使用窗口。addEventListener
在聚焦到窗口外时将其暂停
当我在InternetExplorer9中测试它时,我注意到每个间隔每次执行两次,因此它不是切换到下一个项目然后等待15秒(就像在其他浏览器中发生的那样),而是在等待下一个间隔之前滚动两个项目
代码可能太长,无法发布,但页面本身位于,JavaScript文件位于
我该怎么做才能使它在IE9中正常工作?在将JavaScript应用于IE时,有什么我应该避免的吗?我猜当一切都启动时,您的焦点侦听器会被调用。在启动计时器之前,您可以尝试检查您是否有
carouselIntervalId
:
if(!carouselIntervalId)
carouselIntervalId = setInterval(...);
既然我们在这里都是偏执狂,那么把这个检查放在两个调用之前
然后,当您停止计时器时,您可能希望将carouselIntervalId设置为null:
if(carouselIntervalId)
clearInterval(carouselIntervalId);
carouselIntervalId = null;
当然,您需要以上所有clearInterval
调用
另外,当我引起您的注意(?)时,我注意到您有两个不同的setInterval
调用:
setInterval(function() { carouselNext() }, 15000);
// And later...
setInterval(function() { if (animate == true) { carouselNext() } }, 15000);
您可能希望使它们相同,以避免混淆和bug。在Firefox 5.01中也是如此。我可以在IE调试器中验证代码是否在启动时设置了两个间隔计时器——一个在初始化中,另一个在初始焦点事件中。正如mu所说,如果已经有一个间隔在运行,那么修复程序将不会设置新的间隔。@jfriend00:谢谢,我不想拖出我的IE测试设备。检查
carouselIntervalId
似乎已经做到了这一点。不知何故,我的脑海里一直在想,为carouselIntervalId
设置一个新的值只会删除旧的间隔,并用新的间隔替换它。