PORTFOLIO & WEB DESIGN MEMORANDOM BLOG   
PORTFOLIO & WEB DESIGN MEMORANDOM BLOG   

【JavaScript】GSAPのタイムライン入門ガイド:複数のアニメーションを自在にコントロール!

アニメーションライブラリ「GSAP(GreenSock Animation Platform)」は、Webアニメーションをなめらか&強力に実装できるツールです。

中でもタイムライン機能は、複数の動きを順番に、あるいは同時に組み立てられるとても便利な仕組みです。GSAPのタイムラインの基本を解説します。

タイムラインとは?

普通にGSAPでアニメーションを作るときは、以下のように gsap.to() を使います。

  1. gsap.to(".box", { x: 100, duration: 1 });

でも、複数の .to() を並べると、すべて同時に再生されてしまいます。

  1. // すべて同時に実行される
  2. gsap.to(".box", { x: 100, duration: 1 });
  3. gsap.to(".box", { rotation: 360, duration: 1 });
  4. gsap.to(".box", { scale: 0.5, duration: 1 });

これを、順番に実行したい!というときに使うのが、gsap.timeline() です。

タイムラインの基本構文

  1. // タイムラインを作成
  2. const tl = gsap.timeline();
  3. // 順番にアニメーションを追加
  4. tl.to(".box", { x: 100, duration: 1 })
  5.   .to(".box", { rotation: 360, duration: 1 })
  6.   .to(".box", { scale: 0.5, duration: 1 });

ポイント

• .to() をチェーンでつなげて順番を指定
• duration は秒数
• アニメーションは順番通りに再生される

.from() や .fromTo() との違い

GSAPには .to() だけでなく、アニメーションの始点を指定する .from() や、始点と終点の両方を指定する .fromTo() もあります。

メソッド 説明
.to() 現在の状態→指定の状態へ
.from() 指定の状態→現在の状態へ
.fromTo() 明確に開始→終了を指定

  1. // 透明で上から登場 → 横にスライド
  2. tl.from(".box", { opacity: 0, y: -50, duration: 1 })
  3.   .to(".box", { x: 200, duration: 1 });

アニメーションを重ねる(オーバーラップ)

  1. tl.to(".box1", { x: 100, duration: 1 }) // 1秒アニメーション
  2.   .to(".box2", { x: 100, duration: 1 }, "<"); // 同時に開始

タイミング指定の記号

"<"を指定すると直前のアニメーションと同時に開始されます。
">"を指定すると直前のアニメーションが終了してから開始されます。(デフォルト)
"1"を指定するとタイムラインの1秒地点から開始されます。

記号 / キーワード 意味・説明
< 前のアニメーションと同じ開始位置(前のstartTimeと同じ)
> 前のアニメーションの終了時点からスタート(デフォルト動作)
<+=1 前のアニメーションの開始から1秒後に開始
>-=0.5 前のアニメーションの終了の0.5秒前に開始
label 指定したラベルの位置にアニメーションを配置
label+=1 指定したラベルの1秒後にアニメーションを配置
<label ラベルの位置より前(通常使われない構文)
タイム(数値) タイムラインの絶対位置(秒)を指定
例: 2 → 2秒の位置
+=1 前の位置より1秒後(相対指定)
-=0.5 前の位置より0.5秒前(相対指定)

「タイム(数値)」とは、GSAPのタイムラインにおける「絶対時間指定」のことを指します。

  1. const tl = gsap.timeline();
  2. tl.to(".box", { x: 100, duration: 1 }, 0); // 0秒の位置にアニメーションを配置
  3. tl.to(".circle", { x: 100, duration: 1 }, 2); // 2秒の位置にアニメーションを配置

ここで 0 や 2 のように、数値でタイミングを直接指定する方法が「タイム(数値)」です。

相対指定と絶対時間指定の違い

2 タイムラインの開始から2秒後に実行(絶対時間)
+=2 前のアニメーションが終わってから2秒後に実行(相対時間)

実際のHTML+JSで試してみよう!

See the Pen
Untitled
by ryotom (@ryotam-smoke)
on CodePen.

この例では、ボックスが
1. フェードインしながら拡大
2. 横にスライド
3. 180度回転
という流れになります。

タイムラインの応用:繰り返し・逆再生も可能!

  1. const tl = gsap.timeline({ repeat: 1, yoyo: true });
  2. // repeat: 1 → もう一回繰り返す
  3. // yoyo: true → 行ったら戻る

label(ラベル)とは?

「label(ラベル)」は、GSAPのタイムライン内で「目印(名前付きの位置)」を作る機能です。
あとからその目印を使って、アニメーションの配置をわかりやすく・柔軟に制御できます。

基本の使い方

  1. const tl = gsap.timeline();
  2. tl.add("intro"); // ← この位置に「intro」というラベルを追加
  3. tl.to(".box", { x: 100, duration: 1 }, "intro"); // 「intro」の位置に配置
  4. tl.to(".circle", { y: 100, duration: 1 }, "intro+=1"); // introの1秒後に配置

• 数値で秒を管理する代わりに、名前付きのポイントで管理できる
• タイムラインが長くなっても、後から編集しやすい
• アニメーションをグループ化して整理できる

See the Pen
Untitled
by ryotom (@ryotam-smoke)
on CodePen.

複数のラベルを制御する記述方法

  1. tl.add("ラベル名", "参照ラベル+=時間差");

このように書くことで、相対的なタイミングを明示できます。

  1. tl.add("titleFadeIn", "boxStart+=1.5");

• tl.add(…)
→ タイムラインの任意の位置にラベル(名前)を追加する関数

• “titleFadeIn”
→ これが新しく追加するラベル名。今後この名前を参照してアニメーションを配置できます。

• “boxStart+=1.5”
→ 既に追加されているラベルboxStartの1.5秒後の位置を指定しています。

つまり、「boxStart というラベルの1.5秒後に titleFadeIn という新しいラベルを追加する」
という意味になります。

複数の要素に適用したアニメーションの例

See the Pen
Untitled
by ryotom (@ryotam-smoke)
on CodePen.

複数の要素もまとめて簡単にアニメーション設定ができるので、ちょっとした工夫で見せ方がグッと良くなります!

まとめ:GSAPのタイムラインは、Webアニメーションの設計図!

GSAPのタイムラインは、アニメーションを順序立てて設計するツールです。コードが整理され、複雑な動きも見通しよく管理できるようになります。
慣れてきたら、スクロール連動やボタンクリック連動などの応用も楽しめます!

MILMONA   MILMONA   MILMONA   MILMONA   MILMONA   
MILMONA   MILMONA   MILMONA   MILMONA   MILMONA