javascript - 当失去焦点时,SetInterval 不在 Firefox 中运行
问题描述
我有一个setInterval
倒计时的功能。
startCountDownWorker() {
this.worker= setInterval(() => {
this.countDown--;
// When count timer reach zero
if (this.countDown === 0) {
// Clear decrement for count down
clearInterval(this.worker);
}
}
}, 1000);
}
该功能在Chrome
, Firefox
, Opera
,上进行了测试,Safari
除了Firefox
. 当失去对 Tab/Window on 的关注时Firefox
,该功能停止并且仅在我重新关注 Tab 时恢复。有什么办法可以解决这个问题??
解决方案
当页面模糊时,浏览器确实对几乎所有的计时函数都应用了一个阈值,因此所有这些超时函数可能只会偶尔执行一次。
不仅如此,甚至还有一个正在起草的传入页面生命周期 API ,它将为页面的可见性添加丢弃和冻结 状态,在此期间,您的脚本根本不会执行,直到解冻。
因此,在你的位置上最好的,为了未来的证明,因为你显然只需要一个相当长的间隔,可能是处理可见性变化并记录页面变得模糊的时间,然后当它重新聚焦时,更新你的计数器基于实际经过的时间。
另一个更可靠的解决方案是不在countDown
您的计数器中实际保存实际值,而是始终计算该计数器的开始时间与现在之间的增量。这样,您就不必依赖浏览器计时器的精度,并且可以调整每次滴答之间的超时时间。
推荐阅读
- go - 重定向初始请求时如何在 gin 中记录响应正文
- python - IBM Cloud:如何访问 API 以进行计费和使用?
- java - 运行声纳分析时无法创建 Java 虚拟机错误
- laravel - 带有html标签的Laravel字符串限制显示的项目少于实际项目数
- perl - 使用 WebService::Dropbox 上传大文件
- c# - 在 dotnet core 2.1 中使用 services.AddKendo() 时无法从程序集“...”加载“...”
- python - 安装scrapy时遇到问题(“分段错误(核心转储)”)
- jsf - 在 p:chart (bar) 的 datatip 中动态显示 x 轴标签
- flutter - 如何在颤振中更改应用栏标题
- python - 将函数应用于列表python的一部分