JavaScript/jQuery 间隔在 Internet Explorer 中执行两次

标签 javascript jquery internet-explorer internet-explorer-9 setinterval

我在 jQuery 中创建了一个小的 fadeIn/fadeOut 轮播,它在迄今为止我测试过的每个符合标准的浏览器中都运行良好; Internet Explorer 9 除外。

使用 setInterval 将轮播设置为每 15000 毫秒滚动到下一个项目,并且还使用 window.addEventListener 在以下情况下暂停它:聚焦窗外。

当我在 Internet Explorer 9 中测试它时,我注意到每个间隔每次都会执行两次,因此不是切换到下一个项目然后等待 15 秒(就像在其他浏览器中发生的情况一样),而是滚动两个项目在等待下一个间隔之前。

代码可能太长,无法发布,但页面本身位于 http://www.stefanvignir.de/ JavaScript 文件位于 http://www.stefanvignir.de/carousel.js .

如何才能使其在 IE9 中正常工作以及在将 JavaScript 适配到 IE 时应该避免什么?

最佳答案

我猜想当一切都启动时,你的焦点监听器就会被调用。您可以在启动计时器之前尝试检查是否有 carouselIntervalId:

if(!carouselIntervalId)
    carouselIntervalId = setInterval(...);

由于我们都非常偏执,因此请在两者 setInterval 调用之前进行检查。

然后,当您停止计时器时,您需要使 carouselIntervalId 无效:

if(carouselIntervalId)
    clearInterval(carouselIntervalId);
carouselIntervalId = null;

当然,您希望所有 clearInterval 调用都包含上述内容。

此外,虽然我引起了您的注意(?),但我注意到您有两个不同的 setInterval 调用:

setInterval(function() { carouselNext() }, 15000);
// And later...
setInterval(function() { if (animate == true) { carouselNext() } }, 15000);

您可能希望使它们相同以避免混淆和错误。

关于JavaScript/jQuery 间隔在 Internet Explorer 中执行两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6805285/

相关文章:

javascript - 错误 : Unable to resolve module `@react-native-community/toolbar-android`

javascript - 将元素列为下拉菜单 : fails on Safari

javascript - 如何在点击事件后隐藏div JavaScript

javascript - 使用 JQuery/JS 区分 HTML <p>

html - 网站在 Firefox 中速度快,在 Internet Explorer 中一般,在 Google Chrome 中速度慢

javascript - 部分刷新触发 XPage 中的 addOnLoad 事件

javascript - Turbolinks 不适用于 SVG 链接

javascript - 从文件上传控件中删除特定文件

javascript - 使用 javascript 设置的 Cookie 一段时间后在 IE 10/IE 8 中消失

javascript - 跨域子弹出窗口关闭时可以重新加载页面吗? IE7+