GSAP Web制作 JavaScript

【GSAP】スクロールでふわっとフェードインさせる方法【アニメーションのサンプルあり】

2023年9月19日

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

GSAPを使ってスクロールして要素をふわっとフェードインで表示させるにはどうしたらいいの?

最初は表示されていなくて、スクロールして画面内に入ったらふわっと表示する実装は実務でも非常に多いです。

色んな方法がありますが、今回はJavaScriptのライブラリ『GSAP』を使った方法を解説していきます。

GSAPを使ったことがないという人は、まず以下の記事を参照下さい。

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

続きを見る

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

じゅんぺいブログは、Web制作コーディングWordPress制作)の技術記事を中心に、約500記事公開しています。ぜひ他の記事も参考にしてみてください!
完全無料のプログラミングスクール『ZeroPlus Gate』
30日間でWeb制作を学べる無料のプログラミングスクールがこちら
いきなり数十万するプログラミングスクールは厳しい・・・という人のお試しに最適です。
現在は無料ですがいつ有料になるか分からないので、気になる方はお早めに👇
(有料になっていたらすいません🙇‍♂️)

\ 完全無料 /

ZeroPlus Gate公式サイト

毎日先着制!

GSAPを使ってスクロールでふわっとフェードインさせる方法

今回はただふわっとフェードインさせるのではなく、スクロールしてからアニメーションを開始させるので、ScrollTriggerというプラグインを使います。

ScrollTriggerの使い方は以下の記事を参照下さい。

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

続きを見る

 

コードの解説

それでは早速ですが、最小限のコードはこちらです。

<div class="container">
  <div class="box"></div>
</div>
gsap.fromTo(
  ".box", // アニメーションさせる要素
  {
    autoAlpha: 0, // アニメーション開始前は透明
  },
  {
    autoAlpha: 1, // アニメーション後は出現(透過率0)
    scrollTrigger: {
      trigger: ".box", // アニメーションが始まるトリガーとなる要素
      start: "top center", // アニメーションの開始位置
    },
  }
);

CSSはただの調整用なので割愛します。

JavaScriptはこのような意味になります。

gsap.fromTo("アニメーションさせる要素",{アニメーション前の状態},{アニメーション後の状態},});

JavaScriptはコメントしてありますが、1つずつ解説します。

  • fromTo:アニメーションの開始から終了まで指定するメソッド
  • ".box":アニメーションさせたい要素
  • autoAlpha: 0:アニメーション開始前の状態。これは透明という意味。
  • autoAlpha: 1:アニメーション後の状態。これは透明じゃなくなるという意味(透過率0)
  • scrollTrigger:スクロールイベント
  • trigger: ".box":アニメーションが始まるトリガーとなる要素(2行目とは意味が違うが、今回はアニメーションさせたい要素とトリガーは同じ要素)
  • start: "top center":アニメーションの開始位置を指定。"top center"は"要素の上 画面の中央"という意味。

サンプルはこちらです(ゆっくりスクロールしながら左を見てて下さい)

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

最初から見たい場合は右下のRerunをクリックして下さい。

 

フェードインアニメーションのサンプル

それでは何種類かアニメーションのサンプルをご紹介します。

また先ほどのコードに分かりやすくするため以下のコードを追記します。

  • toggleActions: "play none none reverse":スクロールした後に戻るとアニメーションも戻る。
  • markers: true:確認用のマーカーを表示。

アニメーションをもう一度見たい場合は、右下の『Rerun』をクリックするかスクロールを上に戻してみて下さい。

またアニメーションが発火するタイミングは、startが画面中央のscroller-startを過ぎた時です。

 

上下からフェードイン

これが一番よく使うと思いますが、先ほどはただ透明になっていた要素が表示されただけですが、今度は少し下から上に向かってフェードインさせてみます。

追記したコードは縦方向の位置を指定する"y"です。

gsap.fromTo(
  ".box", // アニメーションさせる要素
  {
    y: 100, // アニメーション開始前の縦位置(下に100px)
    autoAlpha: 0, // アニメーション開始前は透明
  },
  {
    y: 0, // アニメーション後の縦位置(上に100px)
    autoAlpha: 1, // アニメーション後に出現(透過率0)
    scrollTrigger: {
      trigger: ".box", // アニメーションが始まるトリガーとなる要素
      toggleActions: "play none none reverse", // 上スクロールで戻る
      start: "top center", // アニメーションの開始位置
      markers: true, // マーカー表示
    },
  }
);

サンプルはこちら。

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

今回は分かりやすくするように100pxと少し大きめに移動していますが、実際は20pxくらいの控えめな数値がいいかも知れません。

またy: 100ではなくy: -100にすると上からフェードインします(あまり使わないと思いますが)

 

左右(横)からフェードイン

今度は横からですが、先ほどの縦が"y"で横は"x"になります。

gsap.fromTo(
  ".box", // アニメーションさせる要素
  {
    x: 100, // アニメーション開始前の横位置(右に100px)
    autoAlpha: 0, // アニメーション開始前は透明
  },
  {
    x: 0, // アニメーション後の横位置(左に100px)
    autoAlpha: 1, // アニメーション後に出現(透過率0)
    scrollTrigger: {
      trigger: ".box", // アニメーションが始まるトリガーとなる要素
      toggleActions: "play none none reverse", // 上スクロールで戻る
      start: "top center", // アニメーションの開始位置
      markers: true, // マーカー表示
    },
  }
);

サンプルはこちら。

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

またx: 100ではなくx: -100にすると左からフェードインします

 

斜めからフェードイン

これは単純に"y""x"を両方書くだけです。

gsap.fromTo(
  ".box", // アニメーションさせる要素
  {
    x: -100, // アニメーション開始前の横位置(左に100px)
    y: 100, // アニメーション開始前の縦位置(下に100px)
    autoAlpha: 0, // アニメーション開始前は透明
  },
  {
    x: 0, // アニメーション後の横位置(右に100px)
    y: 0, // アニメーション後の縦位置(上に100px)
    autoAlpha: 1, // アニメーション後に出現(透過率0)
    scrollTrigger: {
      trigger: ".box", // アニメーションが始まるトリガーとなる要素
      toggleActions: "play none none reverse", // 上スクロールで戻る
      start: "top center", // アニメーションの開始位置
      markers: true, // マーカー表示
    },
  }
);

サンプルはこちら(左下から右上に向かってフェードイン)

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

 

拡大しながらフェードイン

次は拡大しながらフェードインさせてみます。

拡大させるにはscaleを使います。

gsap.fromTo(
  ".box", // アニメーションさせる要素
  {
    scale: 1,  // 縦横1倍
    autoAlpha: 0, // アニメーション開始前は透明
  },
  {
    scale: 1.5, // 縦横1.5倍
    autoAlpha: 1, // アニメーション後に出現(透過率0)
    scrollTrigger: {
      trigger: ".box", // アニメーションが始まるトリガーとなる要素
      toggleActions: "play none none reverse", // 上スクロールで戻る
      start: "top center", // アニメーションの開始位置
      markers: true, // マーカー表示
    },
  }
);

サンプルはこちら。

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

 

横に並んだ要素が順番に下からフェードイン

横に並んだ要素を順番にフェードインさせるのもよく使うと思います。

それにはStaggerというプロパティで時間差を作る必要があります。

Staggerの使い方は以下の記事を参照下さい。

あわせて読みたい
【GSAP】Staggerで時間差を作り順番にアニメーションさせる方法
【GSAP】Staggerで時間差を作り順番にアニメーションさせる方法

続きを見る

追記したコードは先ほど解説した下から移動させる"y"と、時間差でアニメーションさせる"stagger"になります。

gsap.fromTo(
  ".box", // アニメーションさせる要素
  {
    y: 100, // アニメーション開始前の縦位置(下に100px)
    autoAlpha: 0, // アニメーション開始前は透明
  },
  {
    y: 0, // アニメーション後の縦位置(上に100px)
    autoAlpha: 1, // アニメーション後に出現(透過率0)
    stagger: 0.2, // 0.2秒遅れて順番に再生
    scrollTrigger: {
      trigger: ".box", // アニメーションが始まるトリガーとなる要素
      toggleActions: "play none none reverse", // 上スクロールで戻る
      start: "top center", // アニメーションの開始位置
      markers: true, // マーカー表示
    },
  }
);

サンプルはこちら。

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

 

色んな組み合わせのアニメーション

最後に色々組み合わせてみたいと思います。

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

他にも四隅の角の丸みを変えるborderRadius、色を変えるbackgroundColor傾斜を変えるskewXskewYなどもあります。

まとめ

今回はGSAPとScrollTriggerというGSAPのプラグイン、あとはStaggerというプロパティを使ったフェードインの実装を解説してきました。

実務でよく使うのは、以下の2つだと思います。

以上になります。

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

 

  • この記事を書いた人

じゅんぺい

37歳からWeb制作とブログ開始。Web制作歴5年目でコーディングとWordPressオリジナルテーマ制作が中心。これまで120件以上を納品。当ブログ月間最高15万PVで、370記事以上はWeb制作の技術記事。コンテンツ販売→累計売上1200万円&1500部超え。X(旧Twitter)フォロワー7200人以上。2024年3月からブログの経験を活かしてライターとしても活動を開始。

-GSAP, Web制作, JavaScript