我有一个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次。
我猜这是为了提高性能而设计的,但是有没有办法禁用这种行为呢?在我的场景中,这实际上是一个缺点。
发布于 2020-02-19 17:23:43
这是一个很老的问题,但我遇到了同样的问题。
如果你在chrome上运行你的网站,你可以通读这篇文章的Background Tabs in Chrome 57 。
基本上,如果时间间隔计时器没有用完计时器预算,它就可以运行。
预算消耗基于定时器内任务的CPU时间使用情况。
根据我的场景,我将视频绘制到画布并传输到WebRTC。
即使选项卡处于非活动状态,webrtc视频连接也会保持更新。
但是,您必须使用setInterval而不是requestAnimationFrame。
不过,不建议将其用于UI渲染。
侦听visibilityChange事件并相应地更改呈现机制会更好。
此外,你可以尝试@kaan- could,它应该可以基于文档工作。
https://stackoverflow.com/questions/5927284
复制相似问题