お問い合わせ
  • アニメーション
  • JavaScript

【GSAP】ScrollTriggerの実用例まとめ

GSAPの数あるプラグインの中でも、特に人気なのが「ScrollTrigger」。
このプラグインを使うと、スクロールに合わせて要素を動かしたり、セクションを固定したり、パララックス効果をつけたりできます。

本記事では、pinやscrubを使った実践的なScrollTriggerの活用方法や、レスポンシブ対応の方法、invalidateOnRefreshの使い方などを解説します。

ScrollTriggerの導入方法

まずはScrollTriggerの導入方法です。
導入方法はいくつかありますが、今回は2通りの方法をご紹介します。

  1. CDN
    公式サイトから、「CDN」のタブを開き「ScrollTrigger」にチェックを入れます。
    コードが出てきますので、ピンクで囲ったコードをコピーして任意の場所(</body>の手前など)に貼り付けてください。
    GSAP自体の導入もまだであれば、水色で囲ったコードも一緒に貼り付けてください。
    この時、水色のコードが上になるよう貼り付けないとエラーになりますのでご注意ください。
  2. 直接ファイルをダウンロードする
    GitHubの、dist>ScrollTrigger.min.js をダウンロードします。
    ダウンロードしたファイルは任意の場所に設置してください。
    GSAP自体の導入もまだであれば、dist>gsap.min.js も一緒にダウンロード、設置してください。

では実際に、ScrollTriggerを使うとどんなことができるのかをご紹介していきます!

【scrub】 スクロールと動きを同期させる

scrubを使うと、スクロール量に応じて要素の動き同期させることができます。
説明だけだと少しイメージしにくいので、まずは実際の動きを見てみましょう!

▼scrubを使わない例

See the Pen
【GSAP】ScrollTrigger_No1
by ishi (@qwwbetnz-the-typescripter)
on CodePen.

▼scrubを使う例(ゆっくりスクロールしてください)

See the Pen
【GSAP】ScrollTrigger_No2
by ishi (@qwwbetnz-the-typescripter)
on CodePen.

scrubを使わない例では、要素がスクロールとは関係なく勝手に右に移動しています。一方で、scrubを使う例では、スクロール量に合わせて要素が右に動いているのが分かります。
このように、scrubはスクロール量に応じて要素の動き同期させることができます!

scrubでパララックス(視差効果)を実装

ScrollTriggerでは、このscrubを使用してパララックス(視差効果)を簡単に実装できます。
パララックスとは背景や要素が異なる速さで動く演出のことで、立体感を感じさせることができます。

実際にパララックスを実装してみましょう!

▼コード


gsap.registerPlugin(ScrollTrigger);
gsap.to(".parallax-bg", {
  y: -150, // 背景を上に動かす
  scrollTrigger: {
    trigger: ".parallax-bg",
    start: "top bottom", // セクションが画面に入った瞬間に開始
    end: "bottom top", // セクションが画面から出るまで
    scrub: 3, // スクロール量に合わせてアニメーションを進める(値を変えると速度も変わります)
  },
});

▼実際の動き

See the Pen
【GSAP】ScrollTrigger_No3
by ishi (@qwwbetnz-the-typescripter)
on CodePen.

スクロールすると、テキストは通常通りに動きますが、画像はゆっくり滑るように動きます。これがパララックスです!

記述方法としては、ScrollTrigger:{ }の中に、対象の要素、開始位置などと一緒に、scrub: 3,を記述します。
scrub: 3 の数値は、アニメーションがスクロールに追従する速さを指定しています。
小さいほどキビキビ動き、大きいほど滑らかに動きます。

【pin】 要素を固定する

ScrollTriggerでは、pinを使用することで、要素を固定することができます。

こちらも実際に見てみましょう!

▼コード


gsap.registerPlugin(ScrollTrigger);
ScrollTrigger.create({
  trigger: ".js-pin-container",
  start: "top top",
  end: "bottom top",
  scrub: true,
  pin: true,
});

▼実際の動き

See the Pen
【GSAP】ScrollTrigger_No4
by ishi (@qwwbetnz-the-typescripter)
on CodePen.

pin: true,と記述すると、トリガー要素(trigger に指定した要素)がstartの位置からendの位置まで画面に固定(ピン留め)されます。

注意として、pinで固定した要素自体に、別のアニメーションを適用すると位置がおかしくなってしまうことがあるため、しない方が良いです。固定した要素内の要素をアニメーションさせましょう。

【matchMedia】 レスポンシブ対応

レスポンシブ対応も実は簡単に行うことができます!
下記のコードを使用してレスポンシブできますが、pxはサイトに合わせて任意の数値を入れてください。

▼コード


ScrollTrigger.matchMedia({
  // 画面幅が960px以上の時
  "(min-width: 960px)": function () {
    // アニメーション内容
  },

  // 画面幅が600px以上、959px以下の時
  "(min-width: 600px) and (max-width: 959px)": function () {
    // アニメーション内容
  },

  // 画面幅が599px以下の時
  "(max-width: 599px)": function () {
    // アニメーション内容
  },

  // 全ての画面幅で適用するデフォルトのアニメーション
  all: function () {
    // アニメーション内容
  },
});

【invalidateOnRefresh】 画面リサイズ時に再計算

こちらをtrueにすると、画面サイズが変更された時に、内部的に記録されている値を全て削除してくれます。これにより、値が再計算され、正しい位置でアニメーションされるようになります。

▼コード


gsap.registerPlugin(ScrollTrigger);
const pinContainer = document.querySelector(".js-pin-container");

ScrollTrigger.create({
  trigger: pinContainer,
  start: "top top",
  end: () => "+=" + (pinContainer.offsetHeight),
  scrub: true,
  pin: true,
  pinSpacing: true,
  invalidateOnRefresh: true,
});

実務で使えるアニメーションを作ってみる

ここまでで紹介したscrub、pinなどを使って、「スクロールに合わせて要素を拡大、テキストをpinで固定」するアニメーションを作ってみました!

 

See the Pen
【GSAP】ScrollTrigger_anim
by ishi (@qwwbetnz-the-typescripter)
on CodePen.

▼コード

See the Pen
【GSAP】ScrollTrigger_anim
by ishi (@qwwbetnz-the-typescripter)
on CodePen.

 

今回は背景色を拡大させるアニメーションにしました。
ここを画像に置き換えれば、画像を眺めながらテキストをじっくり読める、よりリッチな演出になると思います。

ScrollTriggerでエラーが出た時の確認ポイント

エラーが出た時や動かない時は大体は下記が原因ですので、確認してみてください。

ファイルの読み込み順

・GSAP本体
・ScrollTrigger
・自作スクリプト
の順に読み込みを行っているかを確認してください。

記述漏れ

gsap.registerPlugin(ScrollTrigger);

ScrollTriggerのコードを記述する際は、必ず上記のコードを先に記述する必要があります。
忘れがちですが、漏れていないか確認しましょう。

まとめ

ScrollTriggerを活用すれば、スクロールに連動したリッチで動きのあるアニメーションを簡単に作成できます。

ぜひ、この記事を参考にして、自分だけのオリジナル演出作りに挑戦してみてください!

【関連記事】

▼GSAPの導入方法や、アニメーションの作り方を知りたい方はこちら
GSAP入門編|アニメーションの作り方を解説

▼GSAPの基礎や特徴、事例を知りたい方はこちら
GSAPの基礎と特徴を徹底解説|事例から学ぶ活用法

ドコドア エンジニア部

ドコドア エンジニア部

Flutterなどの技術を活用し、ユーザーにとって価値ある高品質なモバイルアプリ・Webアプリの開発に取り組んでいます。
このブログでは、アプリ開発の現場で培ったフロントエンド、バックエンド、インフラ構築の知識から生成AI活用のノウハウまで、実践的な情報をアプリ開発に悩む皆様へ向けて発信しています!
【主な技術スタック】 Flutter / Firebase / Svelte / AWS / GCP / OpenAI API

Contact Us

Web制作、Webマーケティング、SFA・MA導入支援に関するお悩みがある方は、お気軽にご相談ください。

お問い合わせ・ご相談

ホームページ制作、マーケティングにおける
ご相談はお気軽にご連絡ください。

資料請求

会社案内や制作実績についての資料を
ご希望の方はこちらから。

お電話でのお問い合わせ

お電話でのご相談も受け付けております。

※コールセンターに繋がりますが、営業時間内は即日
担当より折り返しご連絡をさせて頂きます。

9:00-18:00 土日祝休み

電話する 無料相談はこちら