ブラウザがアクティブに実行されていることを知る方法はありrequestAnimationFrame
ますか?
たとえば、実行中のタブからタブを切り替えるrequestAnimationFrame
と、関数の実行が停止し、元に戻すと続行します。これに対処する最善の方法は何ですか?
ブラウザがアクティブに実行されていることを知る方法はありrequestAnimationFrame
ますか?
たとえば、実行中のタブからタブを切り替えるrequestAnimationFrame
と、関数の実行が停止し、元に戻すと続行します。これに対処する最善の方法は何ですか?
requestAnimationFrame
が 100% 実行されているかどうかを検出するには、以下を確認できます。
window.addEventListener('blur', function() {
//not running full
}, false);
と
window.addEventListener('focus', function() {
//running optimal (if used)
}, false);
requestAnimationFrame
これは、ウィンドウ (タブ) がアクティブでない場合に (ほとんどのブラウザーで) トリガー率を下げることがわかっているので使用できます(使用されているIF - 実際に を使用しているコードに依存しますrequestAnimationFrame
)。
常に実行したい場合は、次のようなメカニズムを挿入できます。
var isActiveTab = true; //update with the events above
function myLoop() {
//my cool stuff here
if (isActiveTab) {
requestAnimationFrame(myLoop);
} else {
setTimeout(myLoop, 16); //force a rate (vblank sync not necessary
//when display isn't updated
}
}
requestAnimationFrame のレートの削減は標準の一部ではなく、ブラウザ固有の実装であることに注意してください。
再びアニメーションでタブに戻ってきたとき、それは正常に動作しているに違いありません(その場合--以下があなたの答えです!!!)
これが RAF の目的です。パフォーマンスを最適化するためです。代わりに SetInterval と Settimeout を使用してアニメーションを作成できますが、これらはブラウザと対話できず、最終的に CPU を占有することになり、パフォーマンスも非常に遅くなります。
しかし、あなたの質問は実際には質問ではありません。これは実際に、全体的なアニメーション体験を向上させるために RAF が使用するトリックです。
RAF について説明している記事がいくつかあります。 http://creativejs.com/resources/requestanimationframe/
単なる最適化のトリック -- 心配する必要はありません