setInterval 在 Chrome 上无法正常工作

2024-01-07

我有一个定制的幻灯片对象来执行名称在网站上指示的常见操作。一切正常,除非我在 Chrome 中切换选项卡并返回网站选项卡。当这种情况发生时,幻灯片就会变得疯狂并开始淡化图像,而不管setInterval给定的间隔。找不到与此相关的任何内容,所以我想至少知道这是代码问题还是软件问题。

这是代码(与 jQuery 一起使用):

$(function() {

    // slideshow
    var slideshow = {
        id : false,
        current : 0,
        count : 0,
        interval : false,
        init : function(data) {
            if (!data)
                return false;

            $.each(data, $.proxy(
                function(index, value) {
                    this[index] = data[index];
                }, this)
            );

            this.count = this.images.length;

            for (x=1;x<=this.count;x++)
                $('#slider ul.nav').append('<li></li>');

            $('#slider ul.nav li').live('click', function()
            {
                slideshow.click(this);
            });

            $('#slider ul.nav li:eq(0)').addClass('on');
            $('#slider ul.nav').css('width', (15*this.count)+'px');

            return true;
        },
        start : function () {
            slideshow.id = setInterval(function() { slideshow.action(); }, slideshow.options.interval);
        },
        stop : function() {
            clearInterval(slideshow.id);
        },
        action : function() {
            slideshow.current < (slideshow.count-1) ? slideshow.current++ : slideshow.current = 0;

            $('#slider img').fadeOut('normal', function() {
                $('#slider img').attr('src', slideshow.images[slideshow.current].url);
                $('#slider ul.nav li').removeClass('on');
                $('#slider ul.nav li:eq('+slideshow.current+')').addClass('on');
                $('#slider div.title').html(slideshow.images[slideshow.current].title);
                $('#slider div.description').html(slideshow.images[slideshow.current].description);
                $('#slider a.more').attr('href', slideshow.images[slideshow.current].target);
            }).fadeIn('normal');

            return true;
        },
        click : function(o) {
            slideshow.stop();

            var index = $('#slider ul.nav li').index(o);
            slideshow.current = index;

            $('#slider img').fadeOut('normal', function() {
                $('#slider img').attr('src', slideshow.images[index].url);
                $('#slider ul.nav li').removeClass('on');
                $(o).addClass('on');
                $('#slider div.title').html(slideshow.images[index].title);
                $('#slider div.description').html(slideshow.images[index].description);
                $('#slider a.more').attr('href', slideshow.images[index].target);
            }).fadeIn('normal');

            slideshow.start();
            return true;
        },
    };

    slideshow.init(slider);
    slideshow.start();

});

Chrome(显然最新版本的 Firefox 也是如此)降低了速度setInterval当选项卡位于后台时以提高前台性能。当背景页面中有快速运行的计时器驱动的动画时,这可能是最重要的。当页面返回前台时,它“尝试”赶上并运行一堆setInterval调用比通常运行的速度快得多。

解决方法是:

  1. 延长时间setInterval这样 Chrome 就不会弄乱它(你必须查找那个时间是什么)。
  2. 当页面进入后台时停止间隔计时器(当页面不可见时无需运行幻灯片) - 然后当页面进入前台时再次启动它。
  3. 重复使用setTimeout代替setInterval使用某种类型的重复 setTimeout,如下所示:

Code:

function nextSlide() {
    // show next slide now
    // set timer for the slide after this one
    setTimeout(function() {
        nextSlide();       // repeat
    }, xxx)
}

类似的帖子here https://stackoverflow.com/questions/6032429/chrome-timeouts-interval-suspended-in-background-tabs.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

setInterval 在 Chrome 上无法正常工作 的相关文章

随机推荐

  • 将字符串写入 NSPasteBoard

    我无法让这个方法返回 YES BOOL writeToPasteBoard NSString stringToWrite return pasteBoard setString stringToWrite forType NSStringP
  • 在 OS X Yosemite 上构建 binutils 的交叉编译

    我正在尝试构建 binutils 以在 Mac OS X 上生成 MIPS 代码 我找到了这个网站 http www theairportwiki com index php Building a cross compile of GCC
  • 如何使用 Moment.js 从日期中删除时间?

    formatCalendarDate function dateTime return moment utc dateTime format LLL 它显示 2013 年 2 月 28 日 09 24 但我想删除最后的时间 我怎样才能做到这
  • 如何在asdict中获取@property方法?

    我有类似的东西 from attr import attrs attrib attrs class Foo max count attrib property def get max plus one self return self ma
  • 库未加载 @rpath/AFNetworking iOS

    使用自定义 我自己创建的 框架将我的应用程序安装到设备上时 我遇到了非常奇怪的问题 MyFramework 使用 AFNetworking Dropbox 和 Google Drive 我只是将 MyFramework 拖到我的应用程序中并
  • 按列和最大日期分组时如何选择单行?

    我有以下数据想要过滤 所以我只根据第一列的分组得到一行并选择最大日期 co2 包含独特的值 col1 col2 date 1 123 2013 1 124 2012 1 125 2014 2 213 2011 2 214 2015 2 21
  • 我需要多个 EVP_CIPHER_CTX 结构吗?

    我有一个单线程客户端 服务器应用程序 需要对其网络通信进行加密和解密 我计划使用 OpenSSL 的 EVP API 和 AES 256 CBC 我从几个例子中找到了一些示例伪代码 key is 256 bits 32 bytes when
  • Vbscript列出文件夹和子文件夹中的所有PDF文件

    好吧 这是我的代码 但我无法使用 objFile Extension 过滤列表 我确信这很愚蠢 Set objFSO CreateObject Scripting FileSystemObject objStartFolder C dev
  • 了解 Vulkan 统一布局的“集合”索引

    我一直在关注 非常棒的 nvpro 光线追踪教程 并且对使用 CameraProperties 统一缓冲区的绑定方式有疑问layout binding 0 set 1 我理解绑定 0 但为什么设置 1 教程中说 set 1来自以下事实 它是
  • 导入错误:没有名为 cv2.cv 的模块

    python 3 5 和 Windows 10 我使用以下命令安装了 open cv pip install opencv python 3 1 0 cp35 cp35m win amd64 whl 这个命令在 python 中工作正常 i
  • 是否有与 git archive 相反的命令用于导入 zip 文件

    在主要修订正式纳入 大 公司 SCM 系统之前 我们的本地工作流程倾向于使用一系列 zip 文件作为本地 源代码控制 我正在尝试引入 git 作为一种更好的本地 SCM 方法 当前的工作流程对于我们的小团队来说非常有效 特别是当测试机器离线
  • Visual Studio 2015 中缺少 Xamarin 空白应用程序(本机)模板

    我已经在 Visual Studio 2015 中安装了使用 Xamarin 进行开发的所有工具 但不知何故 当我创建新项目时 我没有看到空白应用程序 本机 模板 我只能使用空白应用程序 Xamarin Forms 模板 我已经尝试重新安装
  • 如何对 Symfony2 控制器进行单元测试?

    我想尽可能多地使用测试驱动开发 这是一种很好的工作方式 我对 Symfony2 控制器创建并返回一个新的事实感到困扰Response object 我希望能够对控制器进行单独的单元测试 你怎么做呢 答案是创建一个控制器作为普通旧 PHP 对
  • SQL Server 更改计算列

    有谁知道如何更改计算列而不删除 SQL Server 中的列 我想停止使用该列作为计算列并开始直接在列中存储数据 但希望保留当前值 这可能吗 据我所知 但这是你可以做的事情 添加另一列到表中 使用计算列的值更新该列 然后删除计算列
  • 使用 Python 将 BMP/PNG/JPEG 转换为 SVG 文件

    我目前正在尝试使用 Python 将 BMP 文件转换为 SVG 文件 我正在尝试找到一个 Python 库 使我能够将 BMP PNG JPEG 文件转换为 SVG 文件 我已经尝试过使用 Potrace 但质量很糟糕 我需要相当高质量的
  • 不同文件夹中的文件具有相同的命名空间

    我正在尝试构建一个项目 以便自动生成的一些代码位于子文件夹中generated 但它与父目录中的文件具有相同的命名空间 例如 我有这个结构 它给了我错误PHP Fatal error Uncaught Error Class MyProje
  • 将文本字符串中的任何 url 替换为可单击的 php 链接

    假设我有一串文本 例如 text Hello world be sure to visit http whatever com today 我如何 可能使用正则表达式 插入链接的锚标记 将链接本身显示为链接文本 您可以使用正则表达式来执行此
  • 检测颜色并从图像中删除该颜色

    我的图像背景为浅紫色图像 字符为深蓝色 我的目标是从图像中识别文本 所以我试图从背景中删除浅紫色 以便我的图像没有噪音 但我找不到该图像的确切颜色代码 因为它在各处都有些不同 所以我无法遮盖图像 这是我的代码 import numpy as
  • 构建自引用元组

    在看到多年前的论坛上的一次从未解决的对话后 我想知道如何正确创建一个引用自身的元组 从技术上讲 这是一个非常糟糕的主意 因为元组应该是不可变的 一个不可变的对象怎么可能包含它自己呢 然而 这个问题不是关于最佳实践 而是关于 Python 中
  • setInterval 在 Chrome 上无法正常工作

    我有一个定制的幻灯片对象来执行名称在网站上指示的常见操作 一切正常 除非我在 Chrome 中切换选项卡并返回网站选项卡 当这种情况发生时 幻灯片就会变得疯狂并开始淡化图像 而不管setInterval给定的间隔 找不到与此相关的任何内容