スクロールでカウントアップ

インタラクション Easy #js #counter #scroll

このパーツは、要素が画面に入った瞬間から数字を「0」から目標値まで一気に増やしていくカウントアップ表示です。 IntersectionObserver で対象がビューポートに入ったことを検知し、 requestAnimationFrame で1フレームごとに少しずつ加算します。

▶ プレビュー

解説

このパーツは、要素が画面に入った瞬間から数字を「0」から目標値まで一気に増やしていくカウントアップ表示です。IntersectionObserverで対象がビューポートに入ったことを検知し、requestAnimationFrameで1フレームごとに少しずつ加算します。目標値はdata-to属性に持たせているので、HTMLの値を書き換えるだけで「2,480社」でも「98%」でも使い回せます。toLocaleString()で3桁区切りも自動です。

使うとよい場面

  • 実績紹介の「導入企業数」「累計ダウンロード数」などのインパクトを出したいセクション
  • サービスサイトの強みを並べる数値ハイライト
  • レポートやダッシュボードのサマリー表示

加算の速さはMath.ceil(to/60)のおよそ60を増減して調整します。値を小さくするとゆっくり、大きくすると速く到達します。一度発火したらdisconnect()で監視を解除しているため、スクロールで前後しても再発火せず処理は軽量です。動きを抑えたい利用者のために、prefers-reduced-motionが有効なときは最初から最終値を表示する分岐を足すと親切です。

使用例・適したシーン

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

よくある質問

数えあげる目標の数字はどこで変えますか。
HTMLの数字を入れた要素にある data-to 属性の値を書き換えるだけです。たとえば 2480 を 50000 にすれば、その値まで自動でカウントアップします。
アニメーションの速さは調整できますか。
JS内の加算量 Math.ceil(to/60) の 60 を変えます。数字を大きくすると一度に増える量が増えてカウントが速く終わり、小さくするとゆっくり時間をかけて到達します。
追加日:2026-05-16
← すべてのスニペットへ戻る