【初学者向け】GSAPでテキストアニメーションをやってみた!!

はじめに

この記事の概要

こんにちは、株式会社TOKOSエンジニアのスギタです!
今回は、GreenSock社が開発したGreenSock Animation Platform(GSAP)を使いテキストアニメーションを行ってみようと思います。
アニメーションはハードル高いなーと感じていた自分ですが、公式HPに「コードを使用したアニメーションは、最初は威圧的に見えるかもしれませんが、心配しないでください。私たちのプラットフォームは、シンプルで直感的になるように設計されています。(和訳)」とあるように手軽に実装できたので、
紹介したいと思います🥺

対象読者

  • CSS/HTML等にアニメーション実装させたい方

GSAPの使用方法

使用方法

GSAPを利用するには、オフィシャルサイトからダウンロードするか、CDNサイトでも提供されているので、そのURLを読み込みます。
今回はCDNを利用していきたいと思います。

オフィシャルサイト
参考
GreenSockTOP

CDNを利用する場合は下記のようになります。

<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.9.1/gsap.min.js"></script>
注意

GreenSock社は独自のライセンスを採用しているためご使用の際は公式ページに載っているライセンス規約を守り、ご使用してください🙇‍♂️

実装GSAPの実装

完成アニメーション

今回のアニメーションとしては、まず初めに白色の背景から黒色の背景になり「CREATE PLAY ENJOY」と「作って、遊んで、楽しむ」が下方向からフワッと浮き出てき、
下方向に消え、消えてから「TOKOS inc.」が左方向から徐々に出てくるというものです。
今回の完成アニメーションは下記になります。

HTML/CSS

まずはHTML/CSSの紹介です。

HTML

<div class="background-color">
  <div class="text-area">
    <h1 class="text">CREATE PLAY ENJOY</h1>
    <p class="text">作って、遊んで、楽しむ</p>
    <h1 class="title">
      <span>T</span>
      <span>O</span>
      <span>K</span>
      <span>O</span>
      <span>S</span>
      <span>&nbsp</span>
      <span>i</span>
      <span>n</span>
      <span>c</span>
      <span>.</span>
    </h1>
  </div>
</div>

CSS

html,
body {
  margin: 0;
  padding: 0;
  background-color: #ffffff;
}

.text-area {
  width: 100%;
  height: 100vh;
  align-items: center;
  justify-content: center;
  display: flex;
  flex-direction: column;
}

h1 {
  font-size: 50px;
  margin: 0;
  text-align: center;
  letter-spacing: 1px;
}

p {
  font-size: 16px;
  margin: 0;
  text-align: center;
}

.background-color {
  width: 100%;
  height: 100vh;
  background-color: black;
  opacity: 0;
  position: relative;
}

.text {
  opacity: 0;
  transform: translateY(20px);
  color: #ffffff;
}

.title {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}

.title span {
  opacity: 0;
  color: #ffffff;
}

画面で表示させると、何も写りません。というのも今回GSAPのTweenメソッドでも、gsap.to()というTweenメソッドを使っていくからです。

GSAPの実装

上記で少し触れたGSAPのTweenメソッドですが、全部で4種類あります。
軽くですが紹介したいと思います。
gsap.to()・・・ゴールの状態を指定します(現在の状態からのアニメーション)
gsap.from()・・・スタートの状態を指定します(現在の状態に戻るアニメーション)
gsap.fromto()・・・fromとtoをあわせた指定方法(初期状態から完成状態へのアニメーション)
gsap.set()・・・状態指定(cssを使わずgsap内で指定する)

今回使用するのはメソッドはgsap.toですので、上記で映らなかった初期状態からgsapを使い完了状態へアニメーションをさせるという事になります。
ではGSAPの紹介に入ります。

//1.5秒かけ黒色背景を表示
gsap.to(".background-color", {
  duration: 1, //アニメーションの時間の設定
  opacity: 1, //表示状態の指定
});

//.textを1.5秒かけ出現させ1.5秒かけ逆再生させ初期状態に戻す
gsap.to(".text", {
  delay: 1, //アニメーションの初期遅延(アニメーションが開始されるまでの指定)
  duration: 1, //アニメーションの時間の設定
  opacity: 1, //表示状態の指定
  y: "0px", //cssでY軸-20pxから完了時0pxへの指定
  yoyo: true, //trueにすることで上記で指定したY軸の動きの逆再生
  repeat: 1, //yoyoのリピート回数
  //同じclass名のバリデーションの設定
  stagger: {
    each: 0.5, //ディレイ時間
  },
});

//初期遅延3.5秒かけてから.titleを表示
gsap.to(".title span", {
  delay: 3.5, //アニメーションの初期遅延(アニメーションが開始されるまでの指定)
  duration: 1.5, //アニメーションの時間の設定
  opacity: 1, //表示状態の指定
  //同じclass名のバリデーションの設定
  stagger: {
    each: 0.2, //ディレイ時間
    from: "start", //出現方法の指定
  },
});

上記でもわかる通りすべて完了状態への指定の仕方になります。
これでアニメーション実装完了です!!

Tweenのオプション等はわかりやすく説明されているので、下記を参照してください!!


参考
GSAP基本機能Qiita

終わりに

今回は簡単ではありますが、GSAPを使いテキストアニメーションを実装してみました。
でも一つ疑問が、もし背景の出現指定のdurationの時間が10秒になった場合、.titleのdelayが3.5秒なのでアニメーションが崩れてしまうような、、、
次回「GSAP Timelineを使ってみた!!!」
次回の記事
参考
GSAP Timelineを使ってみたISSEN