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 に答える