GSAP Web制作 JavaScript

【GSAP】パララックスをScrollTriggerを使って実装する方法【アニメーションのサンプルあり】

※ 当サイトではアフィリエイト広告を利用しています

GSAPを使ってパララックスって作れる?

パララックスとは視差効果という意味ですが、言葉で解説するより見た方が早いと思います。

今回はGSAPを使った方法を解説するので、GSAPを使ったことがないという人は以下の記事を参照下さい。

あわせて読みたい
GSAPとは?基本的な使い方とアニメーションのサンプル付きで解説
GSAPとは?基本的な使い方とアニメーションのサンプル付きで解説

続きを見る

また、パララックスに関する記事は当ブログに他に4記事あります。

CSSのみでスマホ対応のパララックスを作る方法はこちら。

あわせて読みたい
CSSのみでスマホ対応のパララックスを作る方法【サンプル付きで解説】
CSSのみでスマホ対応のパララックスを作る方法【サンプル付きで解説】

続きを見る

スマホ対応パララックス『simpleParallax.js』の使い方はこちら

あわせて読みたい
スマホ対応パララックス『simpleParallax.js』の使い方【サンプル付きで解説】
スマホ対応パララックス『simpleParallax.js』の使い方【サンプル付きで解説】

続きを見る

Luxy.jsでパララックスと慣性スクロールを実装する方法はこちら。

あわせて読みたい
Luxy.jsでパララックスと慣性スクロールを実装する方法【JavaScriptのプラグイン】
Luxy.jsでパララックスと慣性スクロールを実装する方法【JavaScriptのプラグイン】

続きを見る

Swiperでパララックススライダーを作る方法はこちら。

あわせて読みたい
【Swiper】パララックススライダーを作る方法【サンプル付き】
【Swiper】パララックススライダーを作る方法【サンプル付き】

続きを見る

重要なコード以外は省略している箇所が多いので、全部見たい人はCodePen左上のHTML・CSS・JSをクリックして下さい。

 

完全無料のプログラミングスクール『ZeroPlus Gate』
30日間でWeb制作を学べる無料のプログラミングスクールがこちら
  • 30日間でWeb制作を学べる
  • 完全無料
  • 現役エンジニアへの質問無制限
  • オンラインの動画学習なので時間場所を問わず勉強可能
  • 最大4回の学習サポート面談
  • 受付は1日25名までの先着制
無料なのに専属のメンターが付き、現役エンジニアへの質問も無制限という破格のサービスです。
いきなり数十万するプログラミングスクールは厳しい・・・という人のお試しに最適。
現在は無料ですがいつ有料になるか分からないので、気になる方はお早めに👇

\ 完全無料 /

ZeroPlus Gate公式サイト

先着1日25名まで!

GSAPでパララックスをScrollTriggerを使って実装する方法

それではGSAPでパララックスを実装する方法を解説していきます。

今回はGSAPのプラグイン『ScrollTrigger』を使います。

ScrollTriggerの使い方はこちらの記事を参照下さい。

あわせて読みたい
【GSAP】ScrollTriggerの使い方とスクロールアニメーションのサンプルを紹介
【GSAP】ScrollTriggerの使い方とスクロールアニメーションのサンプルを紹介

続きを見る

 

並ぶ要素を異なる速度でパララックス

まずは横に並べた要素を異なる速度でパララックスしていきます。

コードはこちら。

<div class="container js-trigger">
  <div class="box box01"></div>
  <div class="box box02"></div>
  <div class="box box03"></div>
  <div class="box box04"></div>
  <div class="box box05"></div>
</div>

HTMLは特筆するポイントはありません。

JavaScriptはこちらです。

gsap.fromTo(
  ".box02", // アニメーションさせる要素
  {
    yPercent: 100, // 下に要素の幅の1倍分移動
  },
  {
    yPercent: -100, // 上に要素の幅の1倍分移動
    ease: "none", // イージングなし
    scrollTrigger: {
      trigger: ".js-trigger", // アニメーションのトリガー要素
      start: "top bottom", // アニメーション開始位置
      end: "bottom top", // アニメーション終了位置
      scrub: true, // 動作を遅くさせない
    },
  }
);
gsap.fromTo(
  ".box03", // アニメーションさせる要素
  {
    yPercent: 200, // 下に要素の幅の2倍分移動
  },
  {
    yPercent: -200, // 上に要素の幅の2倍分移動
    ease: "none", // イージングなし
    scrollTrigger: {
      trigger: ".js-trigger", // アニメーションのトリガー要素
      start: "top bottom", // アニメーション開始位置
      end: "bottom top", // アニメーション終了位置
      scrub: 1, // 動作が遅くなる
    },
  }
);
gsap.fromTo(
  ".box04", // アニメーションさせる要素
  {
    yPercent: 300, // 下に要素の幅の3倍分移動
  },
  {
    yPercent: -300, // 上に要素の幅の3倍分移動
    ease: "none", // イージングなし
    scrollTrigger: {
      trigger: ".js-trigger", // アニメーションのトリガー要素
      start: "top bottom", // アニメーション開始位置
      end: "bottom top", // アニメーション終了位置
      scrub: 2, // 動作が遅くなる
    },
  }
);
gsap.fromTo(
  ".box05", // アニメーションさせる要素
  {
    yPercent: 400, // 下に要素の幅の4倍分移動
  },
  {
    yPercent: -400, // 上に要素の幅の4倍分移動
    ease: "none", // イージングなし
    scrollTrigger: {
      trigger: ".js-trigger", // アニメーションのトリガー要素
      start: "top bottom", // アニメーション開始位置
      end: "bottom top", // アニメーション終了位置
      scrub: 3, // 動作が遅くなる
    },
  }
);

ちょっと長いので、箇条書きで補足します。

  • fromToはアニメーションの開始から終了まで指定するメソッド
  • easeのイージングは全てなし
  • triggerのアニメーションのトリガーは全て同じタイミング(.boxを囲っている親要素)
  • .box01はアニメーションなし
  • scrubはスクロール量に合わせてアニメーションさせるプロパティ
  • .box02scrub: trueで動作は遅れない
  • .box03〜.box05scrub: 数値は、数値が大きいほど動作が遅くなる
  • 最初のyPercentはアニメーション前の位置
  • 2つ目のyPercentはアニメーション後の位置

ポイントはscrubで、スクロール量に合わせてアニメーションさせているところです。

これを数値にすると、数値が大きいほど遅く動きます。

こちらがサンプルになります。

See the Pen
Untitled
by junpei (@junpei-sugiyama)
on CodePen.

確認するポイントは以下になります。

  • スクロールすると要素が異なる速度で動く
  • 1つ目と2つ目の要素は動き出すタイミングは同じで、動く速度は違う
  • 3〜5つ目はそれぞれ動き出すタイミングが遅れる

これは何度も上下にスクロールして確認すると分かるかと思います。

 

画像をパララックス

次は画像をパララックスさせます。

JavaScriptはこちらになります。

// セレクタ ".js-trigger" で要素を取得
const items = gsap.utils.toArray(".js-trigger");

// 各要素に対してアニメーションを設定
items.forEach((item) => {
  gsap.fromTo(
    item.querySelector("img"), // アニメーションを適用する画像要素を取得
    {
      yPercent: 0, // パララックス前の要素の位置
    },
    {
      yPercent: -20, // 上に要素の幅の1/5分移動
      ease: "none", // イージングなし
      scrollTrigger: {
        trigger: item, // アニメーションのトリガー要素
        start: "top bottom", // アニメーション開始位置
        end: "bottom top", // アニメーション終了位置
        scrub: 1, // 動作を遅らせる
      },
    }
  );
});

CSSで重要な箇所は2つだけです。

  • imgタグの親要素にclass名を付与(今回はjs-trigger
  • imgタグの親要素にheightoverflow: hidden;を指定

js-triggerはJavaScriptで使うclass名で、名前は任意です。

あとはheightoverflow: hidden;ではみ出させる&はみ出した部分を隠すことで、動いているように見えます。

あとJavaScriptでyPercent: -20とありますが、これは『要素の幅の20%上に移動』と言う意味になります。

pxで指定もできますが、そうすると画像サイズに合わせて変えることができないので、今回はyPercentを使っています。

サンプルがこちらです。

See the Pen
Untitled
by junpei (@junpei-sugiyama)
on CodePen.

サンプルではちょっと大きく動かしていますが、上下が切れるので画像によっては注意が必要です(今回だと犬の耳が切れている)

まとめ

今回はGSAPを使ったパララックスの実装方法を解説しました。

パララックスは気が付かない程度の動きにするくらいがちょうどいいかと思います。

以上になります。

この記事が役に立ったと思ったら、シェアボタンからX(旧Twitter)などにシェアすると、いいねされてフォロワーが増えたりすることがあるよ!

 

Web制作おすすめ教材と案件獲得サービス
当ブログではWeb制作学習におすすめの教材を厳選してご紹介しています。
こちらの記事を参考に教材を購入して成果を出している人もたくさんいるので、自分に必要な教材を探してみて下さい。
また、学習面だけでなく営業面である案件獲得サービスもご紹介しています。
スキルが身についても仕事がなければ意味がないので、営業に不安がある人はこちらの記事をぜひ参考にしてみて下さい。
この記事を参考にスキルと営業力を身につけて稼げるようになりましょう!

-GSAP, Web制作, JavaScript
-