003_progress-bar
ページ最上部に固定したバーが、読み進めた割合(読了率)に
連動して左から右へ伸びる実装です。対応ブラウザでは
animation-timeline: scroll() によって
JS なし・CSS だけでスクロール進捗に連動します。
この機能に未対応のブラウザでは、scroll イベントと
requestAnimationFrame を使った軽量な JS が同じ進捗を計算して
バーを更新します(フォールバック)。
OS の「視差効果を減らす」設定が有効な場合は、進捗に追従する動きを止めます。
下方向にスクロールして、バーが伸びていく様子を確認してください。
セクション 1
ここからスクロールを始めると、上部のバーが少しずつ右へ伸び始めます。 進捗率はページ全体に対する現在のスクロール位置の割合です。
セクション 2
対応ブラウザでは、このバーの動きは CSS の
animation-timeline: scroll() がスクロール位置を
タイムラインとして扱うことで実現しています。JS は一切関与しません。
セクション 3
未対応ブラウザでは、scroll イベントを
requestAnimationFrame でフレーム同期に間引きしながら、
読了率を計算してバーの幅(実際は scaleX)を更新します。
セクション 4
CSS とJS は二重に動かないよう、JS 側で
CSS.supports('animation-timeline', 'scroll()') を判定し、
CSS で動く環境では JS はリスナーを張りません。
セクション 5
ページの最下部に近づくにつれてバーは右端へ達し、読了率はおよそ 100% になります。短いページでは進捗の変化が分かりにくいため、 このデモでは縦に長いダミーコンテンツを置いています。
セクション 6
最後まで読み終えると、バーは画面幅いっぱいまで伸びきります。 ここがページの終端です。