Javascript requestAnimationFrame检测停止

Javascript requestAnimationFrame检测停止,javascript,requestanimationframe,Javascript,Requestanimationframe,我注意到,每当我停靠浏览器窗口或切换选项卡时,requestAnimationFrame就会停止调用(我希望会发生这种情况) 是否有方法检测何时发生此停止 原因是,我有一个计时器在我的游戏运行。我想在requestAnimationFrame不再渲染时停止计时器 我查看了“window.blur”和“window.focus”事件,但它们与requestAnimationFrame停止和启动的时间无关(例如,当您在浏览器窗口外单击时,会触发window.blur事件,但requestAnimat

我注意到,每当我停靠浏览器窗口或切换选项卡时,requestAnimationFrame就会停止调用(我希望会发生这种情况)

是否有方法检测何时发生此停止

原因是,我有一个计时器在我的游戏运行。我想在requestAnimationFrame不再渲染时停止计时器

我查看了“window.blur”和“window.focus”事件,但它们与requestAnimationFrame停止和启动的时间无关(例如,当您在浏览器窗口外单击时,会触发window.blur事件,但requestAnimationFrame会继续运行)

我想订阅requestAnimationFrame何时开始和停止。你知道路吗?

试试这个:

var timer;

if (!window.requestAnimationFrame) {
   window.requestAnimationFrame = window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame;
}

requestAnimationFrame(function again() {
 if (timer === "paused") {
  return;
 }

 clearTimeout(timer);

 timer = setTimeout(function () {
  timer = "paused";
  console.log("got ya, you closed the window");

  requestAnimationFrame(function () {
   timer = null;
   console.log("got ya, you re-opened the window");
    requestAnimationFrame(again);
  });
 }, 1e3);

 // rest of code goes here

 requestAnimationFrame(again);
});

需要更多信息吗?只要问一下。

如果您知道在正常情况下,
requestAnimationFrame
至少会触发4Hz,您可以设置一个定时器,比如3Hz,如果定时器之间没有
requestAnimationFrame
勾号,
requestAnimationFrame
计时器已停止。

我非常接近基于rAF的计时器。检查这把小提琴:计时器运行正常,当我切换标签时,它实际上停止了,但当我回到标签时,所有空闲状态/rAF未运行时的时间现在突然累积到总时间。你知道为什么吗?是的。事实证明,这是检测rAF何时停止/启动的唯一方法。基本上我是在计算每次渲染之间的毫秒数。如果该数字超过160(相当于6.25 fps),那么我们可以安全地假设用户已经在浏览器中切换了选项卡或与窗口对接。