読者です 読者をやめる 読者になる 読者になる

非アクティブなときのsetTimeout/setIntervalとrequestAnimationFrame

#9381 (animations halt when the browser is out of focus due to requestAnimationFrame) – jQuery - Bug Tracker
この問題についてちょっと調べたけど、setIntervalとかsetTimeoutはタブが非アクティブなときは、1000ms以下で設定してる場合1000msで実行されるみたい。1000ms以上のときは普通にそのまま実行される。んでrequestAnimationFrameは非アクティブなときは実行されない。

これが原因で、アニメーションの呼び出し元はsetTimeoutで回してるので非アクティブ時に実行されてキューにアニメーションがどんどん溜まる。でもrequestAnimationFrameは実行されないのでキューが溜まるのみで実行はされない。でアクティブになったときに一気にキューが実行される。

呼び出し側で関数を実行するときに

setTimeout(function() { next() }, 3000);

とかなってるところを

setTimeout(function() { requestAnimationFrame(function() { next() }) }, 3000);

とかにすればいいような気がするけど、まあなんか本来のrequestAnimationFrameの使い方じゃないし気持ち悪いかな。