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

はじめに
概要
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でアニメーションをコントロールできる




