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

関連記事
ページ内の同じ種類のコンテナの高さを、最大値に合わせて統一する。
複数の同一クラス要素の高さを最大値に揃える処理をjQueryで実装。イベント発火時の多重処理を防ぐためデバウンスをかけ、動的なレイアウト変更に対応。効率的かつ堅牢な高さ統一が可能。
Details
Details
3ヶ月前
ページ内の同じ種類のコンテナの高さを、最大値に合わせて統一する。
Web制作現場で役立つ!定型文&サンプル文テンプレート集
Webサイトを制作する際、「お問い合わせフォームの自動返信」や「管理者への通知メール」、「サンクスページのメッセージ」など、意外と毎回考えるのが面倒なテキスト要素ってありますよね。本記事では、そういった“目立たないけど重要”な定型文をカテゴ […]
メモ・ノートスケ
メモ・ノートスケ
2ヶ月前
Web制作現場で役立つ!定型文&サンプル文テンプレート集
【jQuery】フルスクリーンナビゲーション時に背景のスクロールを無効にする方法
このjQueryコードは、トグルボタンの状態に応じてナビゲーションを開閉し、背景のスクロールを動的に制御します。クラス名 back をトリガーとして、html 要素に適切なスタイルを適用し、快適なフルスクリーンUIを提供します。
Details
Details
3ヶ月前
【jQuery】フルスクリーンナビゲーション時に背景のスクロールを無効にする方法
2025年のWeb制作 × AI活用の最前線|実務で使えるAIテクノロジーと現場導入ガイド
2025年のWeb制作業界は、AI技術の導入によって大きな変革を迎えています。生成AIやRAG、ノーコードツールを活用することで、デザイン・コーディング・SEO・運用まで大幅な効率化が実現。現場の生産性向上だけでなく、“人にしかできない体験設計”の重要性も高まっています。本記事では、AI時代における最新のWeb制作ノウハウと具体的な実践ポイントを徹底解説。今後のトレンドや現場Tipsも紹介します。
aki0o0
aki0o0
3ヶ月前
2025年のWeb制作 × AI活用の最前線|実務で使えるAIテクノロジーと現場導入ガイド
画像の遅延読み込みはこう変わる!2025年最新版・Lazy LoadとIntersectionObserverの最適解
2025年最新の画像遅延読み込み(Lazy Load)完全ガイド。ネイティブloading="lazy"とIntersectionObserverの使い分け・実装例・SEOやLCPへの最新対応ポイントまで徹底解説。パフォーマンスと検索順位アップのための必読ノウハウ!
aki0o0
aki0o0
3ヶ月前
画像の遅延読み込みはこう変わる!2025年最新版・Lazy LoadとIntersectionObserverの最適解
WordPressサイトでメルマガ運用する時の注意点|簡単にできることには注意が必要でやんす。
「一括管理って響き最高!」だけど…WordPressでメルマガ配信するならセキュリティにご用心!メリットと落とし穴、そしてBenchmark Emailの使い方まで、編集長がゆるっと解説!
WASABI
WASABI
1ヶ月前
WordPressサイトでメルマガ運用する時の注意点|簡単にできることには注意が必要でやんす。
固定ヘッダー対応!jQueryベースのアンカーリンク平滑スクロール+位置補正実装
固定ヘッダーで隠れない! ページ内リンクをクリックしてもスクロール先が見えない問題を、jQueryを使って滑らかに解決。スムーズスクロール+動的補正により、非同期コンテンツにも対応した実用的な実装コードを紹介します。
キウイフルーツ
キウイフルーツ
2ヶ月前
固定ヘッダー対応!jQueryベースのアンカーリンク平滑スクロール+位置補正実装
jQuery Sortableがスマホなどのタッチスクリーンで使えない場合の対処法
モバイル端末でのクリックイベントとの競合を避けるため、タップ操作には click より touchstart を使うことを推奨。 jQuery UI のバージョンによっては、内部構造が異なる場合があるため、導入時はテストを行うこと。
Details
Details
3ヶ月前
jQuery Sortableがスマホなどのタッチスクリーンで使えない場合の対処法