ページスクロール進捗バー(上部)

インタラクション Easy #js #scroll #progress #indicator

ページをどこまで読み進めたかを、画面上部の細いバーの伸び具合で示すインジケーターです。仕組みはシンプルで、 scroll イベントのたびに「現在のスクロール量 ÷ スクロールできる総量」を百分率で計算し、バーの width をその割合に更新します。

▶ プレビュー

解説

ページをどこまで読み進めたかを、画面上部の細いバーの伸び具合で示すインジケーターです。仕組みはシンプルで、scroll イベントのたびに「現在のスクロール量 ÷ スクロールできる総量」を百分率で計算し、バーの width をその割合に更新します。バーは position:fixed; top:0 で常に最上部に固定し、z-index を高めにして他要素の上へ。伸び縮みに transition:width を効かせているので、値の更新がカクつかず滑らかに見えます。

効果的な場面

  • 読了率を上げたい長文の記事やブログ
  • セクションが多い縦長のランディングページ
  • 利用規約やマニュアルなど、残量を知らせたい長いページ

バーの色や太さは .progbackgroundheight で自由に変えられ、グラデーションにするとブランド感を出せます。注意点として、scroll イベントは高頻度で発火するため、重い処理を中に書くと動作が重くなります。ここでは width 更新だけに留めているため軽量です。さらに最適化したい場合は requestAnimationFrame でまとめると安心です。装飾的な要素なので、読み上げソフトには関係しないよう aria-hidden を付けてもよいでしょう。

使用例・適したシーン

  • LP の演出強化
  • 記事の読了率向上
  • ストーリーテリング表現

よくある質問

バーの色や太さは変えられますか
変えられます。.prog の background で色やグラデーションを、height でバーの太さを調整します。上ではなく下に置きたい場合は top:0 を bottom:0 に変えれば画面下端のプログレスバーになります。
scroll イベントで動作が重くなりませんか
このパーツは幅の更新だけに絞っているため軽量です。さらに負荷を抑えたい場合は requestAnimationFrame でまとめて描画する、あるいは計算を間引く(スロットリング)と、より滑らかになります。
追加日:2026-05-11
← すべてのスニペットへ戻る