スクロール位置でアニメ発火!jQueryで特定クラスを追加する方法

スクロール位置でアニメ発火!jQueryで特定クラスを追加する方法

目的:ページの特定位置にスクロールしたときに、アニメーションで要素を表示する。
使用技術:jQuery(スクロールイベント監視)、CSS(アニメーション)、クラス操作(addClass)。
主な用途:商品紹介、LP(ランディングページ)のアニメーション、スクロール型プレゼンなど。

スクロール連動アニメーション実装例

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>スクロールアニメーションのデモ</title>
  <style>
    body {
      margin: 0;
      padding: 0;
      font-family: sans-serif;
    }

    .section {
      height: 100vh;
      display: flex;
      justify-content: center;
      align-items: center;
      font-size: 2rem;
      background: #f0f0f0;
      border-bottom: 1px solid #ccc;
    }

    /* アニメーションの初期状態 */
    .common-animate-item {
      transition: all 0.6s ease;
      opacity: 0;
      transform: translateY(50px);
    }

    /* アニメーションが発動した状態 */
    .common-animate-item.animate-in {
      opacity: 1;
      transform: translateY(0);
    }
  </style>
</head>
<body>

  <div class="section">スクロールしてください 👇</div>

  <div class="section common-animate-item">アニメーション要素 1</div>
  <div class="section common-animate-item">アニメーション要素 2</div>
  <div class="section common-animate-item">アニメーション要素 3</div>
  <div class="section common-animate-item">アニメーション要素 4</div>

  <!-- jQueryの読み込み -->
  <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>

  <script>
    // スクロールイベントのスロットル処理(負荷軽減)
    function throttle(fn, wait) {
      let lastTime = 0;
      return function () {
        let now = new Date().getTime();
        if (now - lastTime > wait) {
          fn.apply(this, arguments);
          lastTime = now;
        }
      };
    }

    // アニメーション対象に初期クラスを追加
    function initAnimateItems() {
      $(".common-animate-item").each(function () {
        $(this).addClass("normalmove");
      });
    }

    // スクロール時にアニメーションを実行
    function handleScrollAnimation() {
      $(".common-animate-item.normalmove").each(function () {
        const $el = $(this);
        const triggerPoint = $(window).height() * 0.75;
        const scrollTop = $(window).scrollTop();
        const offsetTop = $el.offset().top;

        if (scrollTop > offsetTop - triggerPoint) {
          $el.removeClass("normalmove").addClass("animate-in");
        }
      });
    }

    // 初期化処理とイベントの設定
    $(function () {
      initAnimateItems();
      handleScrollAnimation(); // 最初に表示されている要素にも対応

      $(window).on("scroll", throttle(handleScrollAnimation, 100));
    });
  </script>
</body>
</html>

注意点・補足

  • パフォーマンスへの影響scroll イベントは頻繁に発火するため、throttle(スロットル)や debounce(デバウンス)処理を加えるとよいです。
  • モバイル対応:古いスマートフォンブラウザでは動作が不安定な場合があるので、テストが必要です。
  • 一度だけ実行する工夫:状態フラグや「once」クラスなどで、繰り返し処理されないよう制御するのがポイントです。
  • トリガーのタイミング調整:発動位置を調整することで、アニメーションの見逃しを防げます。

Web制作現場でよくある質問(FAQ)

Q1: この機能にはプラグインが必要ですか?

A: 必須ではありません。シンプルな jQuery のスクリプトだけで実装可能ですが、AOS.js などのライブラリを使うと効率的です。

Q2: 特定の要素に到達したかどうかはどう判断しますか?

A: $(window).scrollTop() と、対象要素の .offset().top を比較することで判断できます。

Q3: アニメーションは一度だけ実行されますか?

A: 通常はスクロールのたびに判定されます。1回だけ実行したい場合は、状態を記録したり、クラス追加後に処理を止める方法があります。

まとめ

jQuery を使ってスクロールに応じてクラスを追加することで、要素の登場アニメーションを簡単に実装できます。シンプルかつ直感的な方法で、小〜中規模のプロジェクトや短期間で視覚効果を加えたい場面に適しています。ユーザー体験を高めるためには、処理の最適化や適切なトリガー設定が重要です。

関連記事
画像の遅延読み込みはこう変わる!2025年最新版・Lazy LoadとIntersectionObserverの最適解
2025年最新の画像遅延読み込み(Lazy Load)完全ガイド。ネイティブloading="lazy"とIntersectionObserverの使い分け・実装例・SEOやLCPへの最新対応ポイントまで徹底解説。パフォーマンスと検索順位アップのための必読ノウハウ!
X SIGHT 編集部
X SIGHT 編集部
1ヶ月前
画像の遅延読み込みはこう変わる!2025年最新版・Lazy LoadとIntersectionObserverの最適解
【2025年6月最新版】TIOBEインデックスで見る人気プログラミング言語ランキングとは?
2025年6月最新版のTIOBEインデックスから、今人気のプログラミング言語を解説。Python、C、C++、Javaなどの注目度や、インデックスの活用方法も紹介します。
解構人
解構人
10日前
【2025年6月最新版】TIOBEインデックスで見る人気プログラミング言語ランキングとは?
JavaScriptでURL(パス)からファイル名を取得する
window.location.pathname でURLのパス部分を取得。 lastIndexOf('/') で最後のスラッシュ位置を検出。 substring でスラッシュの次から最後までを切り出し、ファイル名を抽出。
Details
Details
26日前
JavaScriptでURL(パス)からファイル名を取得する
JSでウェブサイトのフッターにあるCopyrightの年数範囲を自動更新する
autoCopyright(startYear, elementId) 関数は、指定した開始年から現在年までの著作権表記(例: "2020 - 2025")を自動生成し、指定されたHTML要素に表示します。
Details
Details
26日前
JSでウェブサイトのフッターにあるCopyrightの年数範囲を自動更新する
jQuery Sortableがスマホなどのタッチスクリーンで使えない場合の対処法
モバイル端末でのクリックイベントとの競合を避けるため、タップ操作には click より touchstart を使うことを推奨。 jQuery UI のバージョンによっては、内部構造が異なる場合があるため、導入時はテストを行うこと。
Details
Details
26日前
jQuery Sortableがスマホなどのタッチスクリーンで使えない場合の対処法
JavaScript を使って通貨形式を数値に変換する
JavaScriptの正規表現を利用し、通貨表記に含まれる無効な記号を取り除くことで、簡単に通貨文字列を数値に変換できます。これにより、数値計算や金額比較などが容易になります。
Details
Details
26日前
JavaScript を使って通貨形式を数値に変換する
ページ内の同じ種類のコンテナの高さを、最大値に合わせて統一する。
複数の同一クラス要素の高さを最大値に揃える処理をjQueryで実装。イベント発火時の多重処理を防ぐためデバウンスをかけ、動的なレイアウト変更に対応。効率的かつ堅牢な高さ統一が可能。
Details
Details
26日前
ページ内の同じ種類のコンテナの高さを、最大値に合わせて統一する。
ページ遷移の一般的な方法
本記事では、Webページにおけるページ遷移(リダイレクト)の一般的な実装方法について紹介しています。JavaScript、HTMLのメタタグ、PHP、ASPを用いたリダイレクト方法をそれぞれ具体的なコード例と共に解説しています。
Details
Details
26日前
ページ遷移の一般的な方法
【jQuery】フルスクリーンナビゲーション時に背景のスクロールを無効にする方法
このjQueryコードは、トグルボタンの状態に応じてナビゲーションを開閉し、背景のスクロールを動的に制御します。クラス名 back をトリガーとして、html 要素に適切なスタイルを適用し、快適なフルスクリーンUIを提供します。
Details
Details
26日前
【jQuery】フルスクリーンナビゲーション時に背景のスクロールを無効にする方法
CSSによる絶対中央寄せ
実用性が高い方法順で7種類の実装方法を紹介 最も推奨されるのは Flexbox と Grid transform を使う方法はどんな要素にも応用可能 line-height や table-cell は特定用途向け JavaScript による制御も紹介されている
Details
Details
18日前
CSSによる絶対中央寄せ
2025年のWeb制作 × AI活用の最前線|実務で使えるAIテクノロジーと現場導入ガイド
2025年のWeb制作業界は、AI技術の導入によって大きな変革を迎えています。生成AIやRAG、ノーコードツールを活用することで、デザイン・コーディング・SEO・運用まで大幅な効率化が実現。現場の生産性向上だけでなく、“人にしかできない体験設計”の重要性も高まっています。本記事では、AI時代における最新のWeb制作ノウハウと具体的な実践ポイントを徹底解説。今後のトレンドや現場Tipsも紹介します。
X SIGHT 編集部
X SIGHT 編集部
24日前
2025年のWeb制作 × AI活用の最前線|実務で使えるAIテクノロジーと現場導入ガイド
JavaScriptでナビゲーション以外の場所をクリックしたらナビゲーションを閉じる
本コードは典型的なモバイル用サイドナビゲーションの実装例です。ボタンによる表示切替と、メニュー外クリック検知を組み合わせることで、ユーザー体験を向上させています。さらにESCキーでのメニュー閉鎖も可能にし、アクセシビリティも配慮しています。
Details
Details
17日前
JavaScriptでナビゲーション以外の場所をクリックしたらナビゲーションを閉じる
固定ヘッダー対応!jQueryベースのアンカーリンク平滑スクロール+位置補正実装
固定ヘッダーで隠れない! ページ内リンクをクリックしてもスクロール先が見えない問題を、jQueryを使って滑らかに解決。スムーズスクロール+動的補正により、非同期コンテンツにも対応した実用的な実装コードを紹介します。
キウイフルーツ
キウイフルーツ
10日前
固定ヘッダー対応!jQueryベースのアンカーリンク平滑スクロール+位置補正実装
フッターのJavaScriptは画像読み込みに影響する?ブラウザの読み込み順と最適化の基本
はじめに Webサイトの表示速度や操作感は、単にコンテンツの量や見た目だけでなく、ブラウザがリソースをどのように読み込むかによっても大きく左右されます。特にJavaScriptや画像の読み込み順序、そしてそれらがどのように相互作用しているか […]
解構人
解構人
4日前
フッターのJavaScriptは画像読み込みに影響する?ブラウザの読み込み順と最適化の基本
IT業界の初心者が知っておくべきの用語(2025版)
新しいテクノロジーについて話すとき、時々自分がみんなのペースについていけないと感じることはありませんか?あるいは、その業界にいるのに、自分はまだ十分ではないと感じ、多くの専門用語を理解しなければならないこともあるでしょう。
Details
Details
9日前
IT業界の初心者が知っておくべきの用語(2025版)