requestAnimationFrame()
window.requestAnimationFrame() メソッドは、アニメーションを実行したいことをブラウザーに指示します。 このメソッドは、次回の再描画の前に、ユーザーが指定したコールバック関数を呼び出すようブラウザーに要求します。
コールバック関数への呼び出し頻度は、通常、ディスプレイのリフレッシュレートと一致します。 最も一般的なリフレッシュレートは 60Hz(60 サイクル/フレーム毎秒)ですが、75Hz、120Hz、144Hz も広く使用されています。 パフォーマンスとバッテリー駆動時間の向上のため、ほとんどのブラウザーでは、バックグラウンドのタブや非表示の <iframe> 内で実行されている場合、requestAnimationFrame() の呼び出しは一時停止されます。
対応ブラウザ
| 機能 | デスクトップ | モバイル | ||||
|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Safari | Chrome Android | Safari iOS | |
| 24 | 12 | 23 | 7 | 25 | 7 | |
| window.cancelAnimationFrame() メソッドは、以前に window.requestAnimationFrame() の呼び出しによってスケジュールされたアニメーションフレームリクエストをキャンセルします。 | 24 | 12 | 23 | 7 | 25 | 7 |
注釈 1件
対応条件
- ベンダープレフィックス付きで対応: webkit (10)
注釈 1件
実装メモ
- バージョン17以前では、Edgeはペイントサイクル前に`requestAnimationFrame`を確実に呼び出さない。
注釈 7件
実装メモ
- コールバックパラメータは `DOMHighResTimestamp` 型です。これは、10マイクロ秒の精度を持ち、`performance.now()` と同様に時刻が0であることを意味します。
- コールバックパラメータは `DOMTimestamp` 型です。これは、ミリ秒単位の精度を持ち、`Date.now()` を呼び出した時点を 0 として扱います。
- 引数を指定せずに呼び出すことができます。
削除済み
- このバージョンで機能が削除されました (42)
- このバージョンで機能が削除されました (11)
対応条件
- ベンダープレフィックス付きで対応: moz (11)
- ベンダープレフィックス付きで対応: moz (4)
注釈 1件
対応条件
- ベンダープレフィックス付きで対応: webkit (6)
注釈 1件
対応条件
- ベンダープレフィックス付きで対応: webkit (18)
注釈 1件
対応条件
- ベンダープレフィックス付きで対応: webkit (6)
注釈 2件
削除済み
- このバージョンで機能が削除されました (23)
対応条件
- ベンダープレフィックス付きで対応: moz (11)
注釈 2件
削除済み
- このバージョンで機能が削除されました (7)
対応条件
- ベンダープレフィックス付きで対応: webkit (6)
注釈 2件
削除済み
- このバージョンで機能が削除されました (7)
対応条件
- ベンダープレフィックス付きで対応: webkit (6)
基本構文
JAVASCRIPT
const element = document.getElementById("some-element-you-want-to-animate");
let start;
function step(timestamp) {
if (start === undefined) {
start = timestamp;
}
const elapsed = timestamp - start;
// Math.min() is used here to make sure the element stops at exactly 200px
const shift = Math.min(0.1 * elapsed, 200);
element.style.transform = `translateX(${shift}px)`;
if (shift < 200) {
requestAnimationFrame(step);
}
}
requestAnimationFrame(step); 実務での使いどころ
-
requestAnimationFrame() の活用
window.requestAnimationFrame() メソッドは、アニメーションを実行したいことをブラウザーに指示します。
注意点
- 古いブラウザでは対応していない場合がある。
実装メモ
- 一部の API はセキュアコンテキスト (HTTPS) やユーザー操作起点を必要とする。利用前に要件を確認すること。