Web活のロゴ

Web制作Output&初心者のための徹底ガイド

Gsapを使用したテキストアニメーション #1

2023.07.29Gsapでテキストアニメーションを実装
はじめに
概要

Gsapを使用して、Webサイトでよく見かける見出しのアニメーションを実装していきます。サンプルコードもダウンロードできますので、Gsapを取り入れたい方はこちらで理解を深めてください。

スポンサーリンク
※本記事の情報は執筆時点のものであり、閲覧時点では変更されている可能性があります。また、ご利用の環境によっては、本記事の内容が正常に動作しないことがあります。最新の情報については、公式サイトなどでご確認ください。
 

実装内容

パターン1

タイトルテキスト

パターン2

タイトルテキスト

パターン3

タイトルテキスト

サンプルコード

上記のコードはこちらからダンロードできます。

 

ポイント解説

HTML

<div class="main-title">
  <h1 class="js_1">タイトルテキスト</h1>
  <span class="line js_1-2"></span>
</div>
<!-- /.main-title -->

gsapで指定する要素を明確にするために、js独自のクラスを記述します。ここではテキストのアニメーションには.js_1並びに、ラインのアニメーションには.js_1_2としています。(名前は任意)

SCSS

.main-title {
  width: fit-content;
  margin-bottom: 50px;

  &.overflow-hidden {
    overflow: hidden;
  }
}

h1 {
  span {
    will-change: transform;
    font-weight: bold;
    font-size: 30px;
    display: inline-block;
  }
}

.line {
  width: 100%;
  display: block;
  border: 0.5px solid #0c1c24;

  &-center {
    width: 100%;
    display: block;
    border: 0.5px solid #0c1c24;
    position: absolute;
    left: 50%;
    transform: translateX(-50%);
  }

  &-right {
    width: 100%;
    display: block;
    border: 0.5px solid #0c1c24;
    position: absolute;
    right: 0;
  }
}

ラインが消える表現として、main-titleにoverflow: hidden;を使用しています。こちらを指定しないとこのようになります。

パターン2

タイトルテキスト

main-titleをwidthをコンテンツの幅に設定しておくことも重要です。ここではfit-contentを使用しています。

Javascript

export function txtSpan(el) {
  const titleElement = document.querySelector(el),
    titleTexts = titleElement.textContent.split("");

  titleElement.textContent = "";
  let outputTexts = "";
  titleTexts.forEach(
    (text) => (outputTexts += text === " " ? " " : `<span>${text}</span>`)
  );
  titleElement.innerHTML = outputTexts;
}


txtSpan(".js_1");

まずは、タイトルを一つずつspanタグで囲みます。ここでは、上記のような方法で設定しています。そして、spanタグをdisplay:inline-block;に変更し、アニメーションを設定していきます。※spanタグがinlineのままだと、アニメーションがうまく機能しません。

 
const txt = gsap.timeline();
txt
  .from(".js_1 > span", 1, {
    y: "100%",
    opacity: 0,

    stagger: {
      amount: 0.7,
    },

    ease: "back.out(2.5)",
  })
  .from(
    ".js_1-2",
    {
      duration: 1.2,
      ease: "cubic-bezier(0.22, 1, 0.36, 1)",
      width: "0",
    },
    "<=0.6"
  );

spanタグをy: “100%”としてテキストの下に配置し、fromメソッドでアニメーションさせます。staggerを使用することにより、テキストを1文字ずつずらしてアニメーションさせることができます。staggerについてはこちらを参照ください。

ラインアニメーションは、easeに”cubic-bezier(0.22, 1, 0.36, 1)”を指定し、fromメソッドでwidth: 0;に設定します。CSSを使って開始位置を変更すれば、パターン3のように右から左に伸びるアニメーションも同じ値で実現できます。

 
スポンサーリンク
まとめ
  • Gsapでリッチなアニメーションが実装できる
  • CSSアニメーションの知識を応用できる
  • 指定する要素を明確にすることが大切
  • timelineでアニメーションをコントロールできる