【发布时间】:2025-12-25 19:45:07
【问题描述】:
我有一个setInterval 每秒运行一段代码 30 次。这很好用,但是当我选择另一个选项卡时(以便带有我的代码的选项卡变为非活动状态),setInterval 出于某种原因设置为空闲状态。
我做了这个简化的测试用例 (http://jsfiddle.net/7f6DX/3/):
var $div = $('div');
var a = 0;
setInterval(function() {
a++;
$div.css("left", a)
}, 1000 / 30);
如果您运行此代码然后切换到另一个选项卡,请等待几秒钟然后返回,动画会从您切换到另一个选项卡时的位置继续。
因此,如果选项卡处于非活动状态,动画不会每秒运行 30 次。这可以通过计算每秒调用 setInterval 函数的次数来确认 - 如果选项卡处于非活动状态,这将不是 30 次,而是 1 或 2 次。
我猜这是为了提高系统性能而设计的,但是有什么办法可以禁用这种行为吗?
这在我的场景中实际上是一个缺点。
【问题讨论】:
-
可能不会,除非您将它与
Date对象一起破解以真正查看时间已过。 -
您能详细解释一下您的方案吗?也许这不是一个缺点。
-
从
Date中读取的,几乎总是最好根据动画开始后经过的实时时间来设置关键动画。因此,当间隔没有快速触发(由于这个或其他原因)时,动画只会变得更不稳定,而不是更慢。 -
问题的标题把我引到这里,但是我的用例有点不同——我需要刷新身份验证令牌,而不管选项卡是否处于非活动状态。如果这与您相关,请查看我的回答 here
标签: javascript google-chrome setinterval