スクロールに合わせてアニメーションが進められるScroll-driven Animationsについて
3 行まとめ
- Chrome115 のリリースで、Scroll-driven Animations が実装された
- Scroll-driven Animations ではスクロールに合わせてアニメーションを進行できる
- シンプルな記述でアニメーションとスクロールを関連づけられる
Scroll-driven Animations とは
Scroll-driven Animations は Chrome115 で実装された、スクロール量に合わせてアニメーションが進められる API です。この新しい API では scroll
イベントを使わずに CSS と JavaScript でアニメーションとスクロールを関連づけることができるようになりました。
上記の記事で紹介されていますが、scroll
イベントを使ったアニメーションの実装と比べて、メインスレッドで重い処理を実行していたとしても、スクロールに合わせたアニメーションがスムーズに実行できます。
Scroll-driven Animations を使ってみよう
実際に Scroll-driven Animations を使って、次の Gif のようにスクロールに合わせて進捗バーが進むアニメーションを実装してみましょう。
今回実装したデモはバージョンが 115 以上の Chrome で次のリンクから確認できます。
また、nus3/ui-labsでコードも確認できます。
Scroll-driven Animations は JavaScript を使っても実装できますが、今回はシンプルに CSS で実装してみましょう。
animation-timeline
プロパティと scroll()
記法
Scroll-driven Animations を使って CSS で、スクロールに合わせたアニメーションを実装するには、animation-timeline
プロパティに scroll()
記法を指定することで実現できます。
@keyframes grow-progress {
0% {
width: 0;
}
100% {
width: 100%;
}
}
.progress-bar {
animation: grow-progress auto linear forwards;
animation-timeline: scroll(root y);
}
scroll()
記法の引数には、どの要素からみたスクロール量なのかを指定する scroller
と、X 軸・Y 軸どちらのスクロールなのかを指定する axis
があります。現時点の仕様を見る限り指定の順番はどちらでも良さそうです。
上記のサンプルコード(scroll(root y)
)の場合、root 要素での Y 軸のスクロール量に合わせてアニメーションが進行します。
scroller
で指定できる要素には root
の他に、self
と nearest
があり、それぞれ、self
では自身の要素、nearest
では親要素が指定できます。
また、axis
では x
と y
の他に、コンテンツが縦書きなのか横書きなのかで X 軸と Y 軸の解釈が変わる block
と inline
があります。
参考リンク
あとがき
今回紹介したサンプルコードを見てもらうと分かる通り、Scroll-driven Animations を使うと、とてもシンプルな記述でスクロールとアニメーションを関連づけることができるようになって良いですね。
Discussion