はじめに

Web制作でアニメーションを実装したいけれど、CSSだけでは限界を感じていませんか。

複雑な動きやタイムライン制御が必要な場面で、多くの制作者が選ぶのがGSAP(GreenSockAnimationPlatform)です。

GSAPは高性能なJavaScriptアニメーションライブラリで、軽量でありながら豊富な機能を持っています。

この記事では、GSAPの基本概念から実装方法まで、実際のコード例を交えながら解説します。

GSAPとは何か

GSAPは2008年にリリースされたアニメーションライブラリで、現在も活発に開発が続けられています。Adobe、Google、Microsoft、Netflixなど多くの大手企業で採用されており、Web制作業界では事実上の標準となっています。

GSAPの特徴

高いパフォーマンス
GSAPはブラウザの最適化技術を活用し、60FPSでスムーズなアニメーションを実現します。CSSアニメーションと比較しても、多くの場面でより高速に動作します。

豊富な機能
基本的なプロパティアニメーションから、SVGアニメーション、3D変換、モーフィングまで幅広く対応しています。プラグインシステムにより、必要な機能だけを選択して使用できます。

直感的なAPI
シンプルで分かりやすいメソッドチェーンにより、複雑なアニメーションも短いコードで記述できます。学習コストが低く、初心者でも扱いやすい設計になっています。

GSAPの基本的な使い方

インストールと読み込み

GSAPを使用するには、CDNから読み込むかnpmでインストールします。

<!--CDNから読み込む場合-->
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.12.2/gsap.min.js"></script>`
#npmでインストールする場合
npm install gsap

基本的なアニメーション

最もシンプルなアニメーションから始めます。

JavaScriptファイルに以下を記述してみてください:

//要素を2秒かけて右に100px移動
gsap.to(".box",{duration:2,x:100});

gsap.to()メソッドは、現在の状態から指定した値まで変化させます。第一引数にセレクタまたは要素、第二引数にアニメーションの設定を渡します。

以下のように複数のアニメーションを実行することも可能です:

//複数のプロパティを同時にアニメーション
gsap.to(".box",{
duration:2,
x:100,
y:50,
rotation:360,
scale:1.5,
});

以下は、GSAPでよく使うプロパティや機能です。

カテゴリ

プロパティ名

説明

基本アニメーション

x, y

X軸・Y軸への移動(pxや%)

rotation

回転(単位: 度)

scale, scaleX, scaleY

拡大・縮小(1 = 等倍)

opacity

透明度(0〜1)

autoAlpha

opacity + visibility制御

時間制御

duration

アニメーションの時間(秒)

delay

開始までの遅延(秒)

repeat

繰り返し回数(-1で無限)

repeatDelay

繰り返しの間の遅延

yoyo

往復アニメーション(trueで有効)

動きの質(イージング)

ease

動きの緩急(例: "power2.out", "bounce"

transformOrigin

拡大や回転の基準点(例: "center center"

CSSプロパティの変化

backgroundColor

背景色の変更

color

文字色の変更

width, height

要素の幅・高さ変更

border, margin, padding

各CSSプロパティも指定可能(ただし数値化できるもの)

イベントフック

onStart

アニメーション開始時の関数

onUpdate

アニメーション中の更新時の関数

onComplete

終了時の関数

スクロール連動(ScrollTrigger)

scrollTrigger

スクロールに応じて発火させる設定オブジェクト(別途プラグイン必要)

アニメーションの種類

GSAPには3つの基本メソッドがあります。

gsap.to()
現在の状態から指定した値へアニメーション

gsap.from()
指定した値から現在の状態へアニメーション

gsap.fromTo()
開始値と終了値を両方指定

//透明から不透明へフェードイン
gsap.from(".fade-in", { duration: 1, opacity: 0 });

//開始と終了を明確に指定
gsap.fromTo(
  ".slide",
  { x: -100, opacity: 0 },
  { duration: 1, x: 0, opacity: 1 }
);

タイムラインでアニメーションを制御

複数のアニメーションを順序立てて実行したい場合、タイムラインを使用します。

基本的なタイムライン

const tl = gsap.timeline();

tl.to(".box1", { duration: 1, x: 100 })
  .to(".box2", { duration: 1, y: 100 })
  .to(".box3", { duration: 1, rotation: 360 });

この例では、box1のアニメーションが完了してからbox2、その後box3のアニメーションが実行されます。

同時実行とオフセット

const tl = gsap.timeline();
tl.to(".box1", { duration: 1, x: 100 }, 1)
  .to(".box2", { duration: 1, y: 100 }, 1)
  .to(".box3", { duration: 1, rotation: 360 }, 2);

第三引数にタイミングを指定することで、アニメーションの開始時間を制御できます。

イージングとアニメーションカーブ

アニメーションの動きに変化をつけるため、イージング(緩急)を設定できます。

//デフォルトのイージング
gsap.to(".box",{duration:2,x:100,ease:"power2.out"});

//バウンス効果
gsap.to(".box",{duration:2,x:100,ease:"bounce.out"});

//カスタムベジェ曲線
gsap.to(".box",{
duration:2,
x:100,
ease:"cubic-bezier(0.25,0.46,0.45,0.94)",
});

GSAPには30種類以上のプリセットイージングが用意されており、自然な動きを簡単に実現できます。

スクロールトリガー

ScrollTriggerプラグインを使用すると、スクロール位置に応じたアニメーションが可能です。

<!doctype html>
<html lang="ja">

<head>
  <meta charset="UTF-8" />
  <link rel="icon" type="image/svg+xml" href="/vite.svg" />

  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>Vite App</title>
</head>

<body>
  <div class="box box1"></div>
  <div class="box box2"></div>
  <div class="box box3"></div>
  <script type="module" src="/src/main.js"></script>
</body>

</html>
//ScrollTriggerプラグインを登録
gsap.registerPlugin(ScrollTrigger);

//要素が画面に入ったらアニメーション
gsap.to(".box2", {
  scrollTrigger: {
    trigger: ".box2",
    start: "top 80%", // 要素の上端が画面の80%位置に来たら開始
    end: "top 30%", // 要素の上端が画面の30%位置に来たら終了
    scrub: true, // スクロールに合わせてアニメーション
  },
  x: 300,
  rotation: 360,
  duration: 2,
});

まとめ

GSAPは学習コストが低く、高機能なアニメーションライブラリです。基本的なto()from()fromTo()メソッドから始めて、タイムラインやプラグインを活用することで、プロフェッショナルなアニメーションを実装できます。

まずは簡単なアニメーションから始めて、徐々に複雑な表現にチャレンジしてみてください。