旧ブログ(ISSEN)から移行しました

【GSAP】コピペOK!GSAPカーテンテキストアニメーション

【GSAP】コピペOK!GSAPカーテンテキストアニメーション

杉田侑祐
杉田侑祐5分で読めます

はじめに

この記事の概要

こんにちは、株式会社TOKOSのスギタです!
今回はGreenSock社のGreenSock Animation Platform(GSAP)を使い、カーテンテキストアニメーションを実装していきたいと思います。
GSAPの基本的な使い方は下記の記事を参考にしてください。

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

この記事では、GreenSock社が開発したGreenSock Animation Platform(GSAP)を使いテキストアニメーションを学ぶことができます。 基本的な使い方から学び、実際にテキストアニメーションを実装する方法を紹介しています。

対象読者

  • Web制作でアニメーションの実装をしたい方

今回の完成予定

今回はGSAPを用いてカーテンアニメーションを実装してみたいと思います。
GSAPを使うと簡単に実装できるので、ぜひお試しください。
今回はHTML&CSSからGSAPまで手順を分けて解説していきたいと思います。

GSAPの導入

GSAPを利用するには、公式サイトからダウンロードするか、CDNでも提供されているので公式サイトを参照してください。
今回はCDNを利用していきたいと思います。

Homepage

Supported by Webflow. Animate Anything - A wildly robust JavaScript animation library built for professionals.

greensock.com

コードの紹介

HTML
<body>
  <p class="text">
    <span class="text__word">Hello World</span>
    <span class="text__bg"></span>
  </p>
</body>
CSS
body {
  /*全体レイアウトのための記述*/
  min-height: 100vh;
  background-color: #333;
  color: #353535;
  position: relative;
  display: flex;
  justify-content: center;
  align-items: center;
}
 
.text {
  font-size: 40px;
  color: #fff;
  position: relative;
}
 
.text__bg {
  display: block;
  width: 100%;
  height: 72px;
  position: absolute;
  left: 0;
  top: 0;
  z-index: 100;
  background-color: #fff;
}

今回のアニメーションを実現するためには.text__bgクラスが重要になります。
このオブジェクトを操作し実現することになります。
テキストに対し背景色白のオブジェクトが覆いかぶさっていると思います。
下記のようになっていれば大丈夫です。

アニメーションを意識したプロパティの追加

先程も少し説明しましたが、今回は.text__bgクラスが重要になります。
実現したいアニメーションをもう一度確認すると、.text__bgが左方向から右方向に伸びてから左に戻るときにテキストが出現するアニメーションになっていると思います。
それを踏まえ今回はto()メソッドを使用するのでアニメーション開始前の状態を追記します。

CSS
body {
  /*全体レイアウトのための記述*/
  min-height: 100vh;
  background-color: #333;
  color: #353535;
  position: relative;
  display: flex;
  justify-content: center;
  align-items: center;
}
 
.text {
  font-size: 40px;
  color: #fff;
  position: relative;
}
 
.text__bg {
  display: block;
  width: 100%;
  height: 72px;
  position: absolute;
  left: 0;
  top: 0;
  z-index: 100;
  background-color: #fff;
  transform-origin: left;
  transform: scaleX(0);
}
 
.text__word {
  opacity: 0;
}

今回は.text__bgが右方向に伸びるのをtransform: scaleXで実現しようと思います。
transform: scaleXだけでは伸びる方向が指定できないので、transform-origin: leftで中心点を左にし左から右に伸びるように指定しています。
またテキストのopacityを0にして消しています。
この状態でブラウザを確認すると何も写っていないと思います。
ここからto()メソッドを使用して完成させていきたいと思います。

GSAPの記述

今回のアニメーションさせる手順として3ステップあります。

  1. 左から右に白色背景のオブジェクトを伸ばす
  2. テキストの表示
  3. 右から左に白色背景のオブジェクトを縮める

これを順に行っていきたいので、Timelineメソッドを使用して実装していきたいと思います。
まだTimelineメソッドの使用方法がわからない方は下記を参照してください。

【初学者向け】GSAP Timelineを使ってみた!!!

GSAPのTimelineを使用して、複数のアニメーションを連続実行する方法を解説します。delayを使わずにアニメーションを連結できる便利な機能です。

JavaScript
const tl = gsap.timeline({ delay: 1 })
const firstBg = document.querySelectorAll(".text__bg")
const word = document.querySelectorAll(".text__word")
 
tl.to(firstBg, {
  scaleX: 1,
  duration: 0.4,
  ease: Power2.easeOut,
})
  .to(
    word,
    {
      opacity: 1,
      duration: 0.1,
    },
    "-=0.1",
  )
  .to(firstBg, {
    scaleX: 0,
    duration: 0.4,
    ease: Power2.easeOut,
  })

Timelineメソッドを用いて1つずつのアニメーションを連結し、実現しています。
scaleXを1にしてからテキストのopacityを1にして表示し、最後またscaleXを0にして元に戻すようにしています。
Timelineメソッドで連続してアニメーションを行う際はdurationで一つずつのアニメーション時間を調整することも重要です。
時間の制御がうまくできていないと見栄えがかなり悪くなります。
またアニメーションのイージングを設定することにより印象も変わってくると思います。
イージングを詳しく知りたい方は下記を参照してみてください。
これにて完成になります。

【GSAP】テキストアニメーションにイージング全種類で比較してみた!

GSAPのイージング全15種類をテキストアニメーションで比較検証。Power0〜4、Back、Elastic、Bounceなど各イージングの動きの違いをCodePenデモで確認できます。

おまけ

右から左に伸ばしたいときはtransform-origin: rightにしてください。

CSS
body {
  /*全体レイアウトのための記述*/
  min-height: 100vh;
  background-color: #333;
  color: #353535;
  position: relative;
  display: flex;
  justify-content: center;
  align-items: center;
}
 
.text {
  font-size: 40px;
  color: #fff;
  position: relative;
}
 
.text__bg {
  display: block;
  width: 100%;
  height: 72px;
  position: absolute;
  left: 0;
  top: 0;
  z-index: 100;
  background-color: #fff;
  transform-origin: right;
  transform: scaleX(0);
}
 
.text__word {
  opacity: 0;
}

さいごに

今回はGSAPを用いてカーテンテキストアニメーションを実装しました。
アニメーションの使い勝手もよく、簡単に実装できるのでどんどん使っていこうと思いました。
イージングやアニメーション時間で印象もかなり変わってくるので、状況に応じて変更していこうと思いました。

この記事を書いた人

杉田侑祐
杉田侑祐

TOKOSのフロントエンドエンジニア兼UI/UXデザイナー。このブログではフロントエンドメインで投稿しています。HIPHOPとゲームが好きです✌️