スキル自身の言葉で
アニメーションを滑らかな60fpsに保つための GSAP 公式ガイダンスで、コストの低いプロパティを選び、レイアウト処理を避けることに重点を置いています。width、height、top、left、margin、padding ではなく、transform 系のキー(x、y、scaleX、scaleY、rotation、rotationX、rotationY、skewX、skewY)と opacity をアニメーションさせること、will-change は実際にアニメーションする要素にのみ CSS で指定すること、DOM の読み取りをすべて書き込みより先に行い、レイアウトのスラッシングを防ぐことを指示します。
バッチ処理に関するガイダンスでは、手動で delay を設定した tween の代わりに stagger を使うこと、長いリストには virtualization を用いること、マウス追従には gsap.quickTo() を使うこと、pin と scrub の調整をデバウンスされた ScrollTrigger.refresh() で行うこと、画面外の tween を kill することが説明されています。これは既存の GSAP アニメーションを調整するデザイナーや開発者向けであり、新規に構築するためのものではありません。
生成されるもの
- アニメーションする要素の CSS に追加する will-change 宣言。
- コンテナ上の mousemove リスナーによって駆動される、x と y のための gsap.quickTo() の設定。
仕組み
- 01コンポジタに適したプロパティをアニメーションさせる
アニメーションを transform 系のキーと opacity に限定することで、処理をコンポジタ上に留め、レイアウトやペイントの発生を防ぎます。
- 02書き込みの一括処理は GSAP に任せる
GSAP は内部でアップデートを既にバッチ処理しているため、リスクとなるのはその周辺で読み取りと書き込みを混在させる自分自身の DOM コードです。
- 03頻繁に更新される値には1つの tween を再利用する
ポインタの移動ごとに更新されるプロパティについては、gsap.quickTo() が更新ごとに新しい tween を割り当てるのではなく、1つの tween を維持し続けます。
- 04スクロール駆動の処理を抑える
scrub: 1 のような小さな scrub 値はスクロール中の処理量を削減できますが、ファイルではその設定を低スペックデバイスでテストするよう指示しています。
- 05見えていないアニメーションを停止する
画面外や非アクティブなアニメーションは一時停止または kill します。例えば、ユーザーがそのセクションから離れた場合などです。