8

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

有没有办法检测何时发生此停止?

原因是,我的游戏中有一个计时器。当 requestAnimationFrame 不再呈现时,我想停止计时器。

我已经查看了“window.blur”和“window.focus”事件,但这些与 requestAnimationFrame 何时停止和启动无关(例如,当您在浏览器窗口外单击时触发 window.blur 事件但 requestAnimationFrame 保持跑步)。

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

4

2 回答 2

4

如果您知道在正常情况下requestAnimationFrame以至少 4 Hz 的频率触发,您可以设置一个例如 3 Hz 的计时器,如果requestAnimationFrame计时器滴答之间没有滴答声,则requestAnimationFrame计时器已停止。

于 2012-10-30T05:58:42.507 回答
1

试试这个:

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);
});

需要更多信息?问一下。

于 2012-10-30T05:58:23.507 回答