スクラブアニメーション(GSAP)

INDEX

説明

スクラブアニメーションは、スクロール量 / 位置に応じてアニメーションを変化させる動きのことです。

今回はGSAP(GreenSock Animation Platform)というJavaScriptのアニメーション実装のライブラリと、

スクロール連動のアニメーションを作成できるGSAPのプラグインのScrollTriggerを使用して実装します。

使用するライブラリ

■ GSAP

GitHub : https://github.com/greensock/GSAP

公式サイト : https://greensock.com/gsap/

■ GSAP ScrollTrigger Plugin

使用方法 : https://greensock.com/docs/v3/Installation?checked=core,scrollTrigger

公式サイト : https://greensock.com/scrolltrigger

手順

手順1

HTMLを作成します。

<div class="scroll-line">
  <div class="inner"></div>
</div>

<div class="top-mv">
  <p class="text">Scrub Animation</p>
</div>

<section class="top-end">
  <p class="text -left">HELLO</p>
  <p class="text -right">EVO Lab</p>
</section>

手順2

CSSを設定します。

ScrollTriggerを使用してスクロールと同時にis-activeを追加する要素には、

アニメーション終了後のスタイルも指定します。

body {
  background-color: #333;
  color: #00d6c4;
  font-family: "Teko", sans-serif;
}

.scroll-line {
  position: fixed;
  bottom: 0;
  z-index: 2;
  width: 100%;
  height: 15px;
  background: #fff;
  .inner {
    content: "";
    top: 0;
    left: 0;
    width: 0;
    height: 15px;
    background: #46e678;
  }
}

.top-mv {
  display: flex;
  justify-content: center;
  align-items: center;
  width: 100vw;
  height: 110vh;
  .text {
    text-align: center;
    text-shadow: 3px 3px 15px rgba(44, 47, 47, 0.4);
    font-weight: bold;
    font-size: 60px;
  }
}

.top-end {
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
  width: 100%;
  height: 100vh;
  overflow: hidden;
  background: #fff;
  transition: background-color 0.7s ease-out;
  .text {
    font-weight: bold;
    font-size: 12vw;
  }
  &.is-active {
    background: #a216ff;
    color: #fff;
  }
}

手順3

scrub: true, にすることでアニメーションがスクロールに同期します

scrollLine.fromTofromToはアニメーションが開始してから終わるまでの設定ができます。

toggleClass: "is-active",を指定することで、スクロールでclass名の追加/削除が可能です。

scrub: 1.5, scrubに値を指定することで、アニメーションする時間の長さを指定できます。

// ページ下部のインジゲーター
const scrollLine = gsap.timeline({
  scrollTrigger: {
    trigger: "body",
    start: "top top",
    end: "bottom bottom",
    scrub: true,    //  ①
  },
});
scrollLine.fromTo(".scroll-line .inner", {    //  ②
  width: 0
 }, {
  width: "100%"
});

//  最後に両端から入ってくるテキスト
ScrollTrigger.create({
  trigger: ".top-end",
  start: "top 50%",
  toggleClass: "is-active",    //  ③
});
const topEnd = gsap.timeline({
  scrollTrigger: {
    trigger: ".top-end",
    start: "top bottom",
    end: "center center",
    scrub: 1.5,
  },
});
topEnd.fromTo(".top-end .-left",{
    xPercent: -100
  },{
    xPercent: 0
  }).fromTo(".top-end .-right",{
    xPercent: 100
  },{
    xPercent: 0
  },
  "<"
);

サンプル

スクラブアニメーションのサンプルです。

コード量はそんなに多くなくても、リッチなサイトが簡単に作れます。

GSAPでは色々なアニメーションに対応したプラグインがあります。

一部有料のプラグインもありますが、短時間で複雑なアニメーションを実装できるので是非試してみてください。

https://greensock.com/gsap-plugins/

参考文献

PREV

LAB一覧

NEXT

最新記事 Latest