【スクロールくどうアニメーション】

スクロール駆動アニメーション とは?

公開:
💡 スクロールがタイムラインになる、CSSだけのシネマ体験
📌 このページのポイント
スクロール駆動アニメーション scroll timeline animation-timeline 0% 100% ページ要素 fade-in slide-in scale-up スクロールに連動して変化 スクロール量 タイムライン進行度 animation-timeline: scroll(); / animation-timeline: view();
スクロール位置がCSSアニメーションのタイムラインになるイメージ
ひよこ ひよこ
ペンギン先生、スクロールしたらふわっと要素が現れるやつ、あれってどうやって作るの?
ペンギン先生 ペンギン先生
昔はJavaScriptスクロール量を監視して、しきい値を超えたらclassを付け替えてアニメーションを動かしてたんだけど、今はCSSだけでできるようになったんだよ。それがスクロール駆動アニメーションだね。
ひよこ ひよこ
CSSだけでできるの?すごいんだね!でも具体的にどんな書き方をするの?
ペンギン先生 ペンギン先生
animation-timeline: scroll() と書くと、そのページのスクロール位置がアニメーションのタイムラインになるんだよ。一番上でアニメーション0%、一番下で100%、って感じで進むんだ。
ひよこ ひよこ
なるほど!じゃあスクロールバーを動かすとアニメーションが一緒に進む感じなんだね!
ペンギン先生 ペンギン先生
そうそう!もう一つ view() というタイムラインもあって、特定の要素がビューポートに入ったり出たりするタイミングを参照できるんだよ。スクロールしたら要素がスライドインする、みたいな演出に使うんだ。
ひよこ ひよこ
Intersection Observerって聞いたことがあるんだけど、それとは違うの?
ペンギン先生 ペンギン先生
Intersection ObserverJavaScriptAPIで「要素が画面に入ったかどうか」を検知するものだよ。スクロール駆動アニメーションCSSだけで完結するから、Javascriptのコードが増えなくて保守が楽になるんだ。2023年頃からChrome・Safari・Firefoxが対応してきて、実用的になってきたよ。
ひよこ ひよこ
ブラウザの対応が最近進んだんだね!パフォーマンスはどうなの?
ペンギン先生 ペンギン先生
ブラウザがネイティブに最適化しているから、JavaScriptでスクロールイベントを毎フレーム監視するより軽いんだよ。ただ、CSSの書き方が少し複雑だから、まずは animation-timeline: scroll() から試してみるといいね。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
スクロール駆動アニメーション」って出てきたら「スクロールに連動してCSSアニメーションが動く仕組み」と思えればだいたいOK!
📖 おまけ:英語の意味
「Scroll-Driven Animations」 = スクロール駆動アニメーション
💬 scroll(スクロール)とdriven(〜に駆動される)を組み合わせた名前で、スクロールがアニメーションのエンジンになる、という意味だよ
← 用語集にもどる