GSAP:Webデザイナーのためのアニメーション入門
この記事の目的&対象
目的
- GSAPの基本パラメータを押さえ、カンタンにアニメーションを実装する
- 主要プラグインと使いどころをサッと理解する
対象
- HTML/CSSの基礎がある方
- WEBサイトにアニメーションを組み込みたい方
はじめに
GSAP(GreenSock Animation Platform)は、高性能で自由度の高いJavaScriptアニメーションライブラリです。
2025年4月、Webflowのスポンサーにより、これまで有料だった高機能プラグインを含む全機能が完全無料化されました。
【情報ソース】2025年4月30日、Webflow公式ブログにて全GSAP機能の無償開放が発表。
※公式ブログ:https://webflow.com/blog/gsap-becomes-free
「どのパラメータをいじればいいんだ…?」と迷うことがないよう、本記事では指定可能なパラメータと主要プラグインの一覧を、実例とともにまとめています。
GSAPとは
GSAPってなに?
GSAPは、Webページ上の要素を簡単にアニメーションさせることができるJavaScriptライブラリです。短く直感的なコードで、スライドやフェード、ズーム、回転といった基本的な動きから、テキスト演出、スクロール連動、SVGアニメーション、レイアウト遷移といった複雑な表現まで、リッチで多彩なアニメーションを実現できます。その柔軟性と拡張性により、Web上でのビジュアル表現の可能性は無限大です。
GSAPでできること
-
スライド:
x
/y
パラメータ -
フェード:
opacity
-
ズーム:
scale
-
回転:
rotation
- テキストアニメ:SplitTextプラグイン
- スクロール連動:ScrollTriggerプラグイン
- SVGアニメ:MorphSVG/DrawSVGプラグイン
- レイアウト遷移:Flipプラグイン
導入方法
1. CDN導入
<!-- GSAP本体(必須) -->
<script src="https://cdn.jsdelivr.net/npm/gsap@3.13.0/dist/gsap.min.js"></script>
<!-- プラグインを使う場合は必要に応じて追加 -->
<!-- 例:ScrollTriggerを使いたい場合 -->
<script src="https://cdn.jsdelivr.net/npm/gsap@3.13.0/dist/ScrollTrigger.min.js"></script>
☑️ 補足
gsap.min.js は必ず必要ですが、各プラグイン(ScrollTrigger, SplitText, MorphSVG など)は使いたいものだけ個別に読み込む形式です。すべてのプラグインを読み込む必要はありません。
下記URLから使いたい機能にチェックを入れると必要なCDNの記述がコピーできます。
2. npm導入
npm install gsap
import { gsap } from "gsap"
import { ScrollTrigger } from "gsap/ScrollTrigger"
// 必要なプラグインを登録
gsap.registerPlugin(ScrollTrigger)
下記URLから使いたい機能にチェックを入れると必要なnpm記述がコピーできます。
GSAPの基本構文
メソッド | 意味 |
---|---|
gsap.from() |
指定した開始状態 → 現在状態 |
gsap.to() |
現在 → 指定した終了状態 |
gsap.fromTo() |
指定開始状態 → 指定終了状態 |
例:フェードイン(from)
gsap.from(".box", {
opacity: 0, // 最初は透明な状態から
duration: 1, // アニメーションの再生時間は1秒
ease: "power2.out" // ゆっくり始まり、なめらかに終了するイージング
});
例:スライドアウト(to)
gsap.to(".box", {
x: 200, // 右方向に200px移動
opacity: 0, // 最終的に透明になる
duration: 0.8, // アニメーションの再生時間は0.8秒
ease: "power1.in" // すばやく加速して一気に終わる動き
});
例:往復アニメーション(fromTo)
gsap.fromTo(".box",
{
x: -100, // 左に100pxずれた位置から開始
opacity: 0 // 最初は透明
},
{
x: 100, // 右に100pxの位置まで移動
opacity: 1, // 最終的に不透明になる
duration: 2, // アニメーション時間は2秒
repeat: -1, // 無限に繰り返す
yoyo: true // 行ったあと逆方向に戻る(往復アニメーション)
}
);
GSAPで指定できる主なパラメータ
どの動きを細かく制御したいときに触るべきパラメータをカテゴリ別に整理しました。
カテゴリ | パラメータ | 説明 |
---|---|---|
位置 |
x , y
|
オフセット位置(pxまたは%) |
透明度 | opacity |
0(透明)〜1(不透明) |
大きさ |
scale , scaleX , scaleY
|
拡大・縮小 |
回転 |
rotation , rotationX , rotationY
|
角度(deg) |
色・背景 |
backgroundColor , color
|
CSSカラー |
サイズ・形状 |
width , height , borderRadius
|
要素サイズ、角丸 |
フィルター |
filter , blur , brightness
|
CSSフィルター |
時間制御 |
duration , delay , repeat , repeatDelay , yoyo
|
時間、遅延、繰り返し |
動きの緩急 | ease |
イージング(例:"power2.out" ) |
連携制御 |
stagger , onStart , onUpdate , onComplete
|
要素を順番に動かす、コールバック設定 |
クリア | clearProps |
アニメ終了後にスタイルをリセット |
Point:まずは
duration
/delay
/ease
に慣れ、そのあとstagger
やrepeat
を試すとスムーズです。
GSAPの主要機能&プラグイン(徹底解説)
ScrollTrigger(スクロール連動)
<!-- CDN読み込みが必要 -->
<script src="https://cdn.jsdelivr.net/npm/gsap@3.13.0/dist/ScrollTrigger.min.js"></script>
gsap.registerPlugin(ScrollTrigger); // ScrollTrigger プラグインを登録
gsap.from(".section", {
scrollTrigger: {
trigger: ".section", // スクロールを監視する要素
start: "top 80%", // 要素の上端がビューポートの80%位置に来たとき開始
end: "bottom 20%", // 要素の下端がビューポートの20%位置に来たとき終了
toggleActions: "play pause resume reset", // スクロールに応じた動作
markers: true // デバッグ用マーカーを表示(start/end位置)
},
y: 50, // 下に50pxずれた位置から
opacity: 0, // 透明な状態から
duration: 1 // 1秒でアニメーション
});
ScrollTrigger の4つのスクロールタイミング
toggleActions: "1:onEnter 2:onLeave 3:onEnterBack 4:onLeaveBack"
1 onEnter → 下にスクロールして要素が画面に入ったとき(start を通過)
2 onLeave → 下にスクロールして要素が画面から出たとき(end を通過)
3 onEnterBack → 上にスクロールして要素が再び画面に入ったとき(end を戻った)
4 onLeaveBack → 上にスクロールして要素が画面から消えたとき(start を戻った)
設定項目 | 動作内容 |
---|---|
play | 再生 |
pause | 一時停止 |
resume | 再開 |
reset | 最初の状態に戻す |
none | 指定なし |
- トリガー要素が画面に入った/出たタイミングで自在に制御可能です
参考記事:GSAPのScrollTriggerでスクロールアニメーションを実装する方法
https://gri-t.com/gsap-scroll-trigger/
Timeline(シーケンス制御)
// タイムラインを作成(すべてのアニメーションに duration: 0.8秒, ease: "power1.out" を適用)
const tl = gsap.timeline({ defaults: { duration: 0.8, ease: "power1.out" } });
tl.from(".box01", {
y: 50, // 下から50pxの位置から
opacity: 0 // 透明な状態から
})
.from(".box02", {
x: -100, // 左から100pxずれた位置から
opacity: 0
}, "-=0.4") // 前のアニメーションの終了0.4秒前から開始
.from(".box03", {
scale: 0, // 拡大0(小さい状態)から
opacity: 0
}, "-=0.4"); // これも前のアニメーションと0.4秒重ねて始める
- 複数アニメーションをまとめて管理。同期やズラすことができます
Stagger(間隔をあける)
gsap.from(".item", {
opacity: 0, // 最初は透明な状態から
y: 20, // 下に20pxずれた位置から開始
stagger: 0.35, // 各.itemが0.35秒ずつずれて順番に再生
duration: 0.8 // 各アニメーションの時間は0.8秒
});
- リストやグリッドの要素を、少しずつタイミングをズラせます
SplitText(文字分解アニメ)
<!-- CDN読み込みが必要 -->
<script src="https://cdn.jsdelivr.net/npm/gsap@3.13.0/dist/SplitText.min.js"></script>
gsap.registerPlugin(SplitText); // SplitTextプラグインを有効化(CDN読み込み必須)
// .heading 要素のテキストを「文字」と「単語」に分解
const split = new SplitText(".heading", { type: "chars, words" });
// 各文字(chars)を順番にアニメーション
gsap.from(split.chars, {
opacity: 0, // 最初は透明
y: 20, // 下に20pxずれた位置から登場
stagger: 0.05, // 各文字が0.05秒ずれて順にアニメーション
duration: 0.6 // 各文字のアニメーション時間は0.6秒
});
- 見出しやキャッチコピーを1文字ずつ、1単語ずつ登場させられます
MorphSVG(形状変形)
<!-- CDN読み込みが必要 -->
<script src="https://cdn.jsdelivr.net/npm/gsap@3.13.0/dist/MorphSVGPlugin.min.js"></script>
<svg viewBox="0 0 200 200">
<path id="circle" d="M100,50 a50,50 0 1,0 0.01,0" />
<path id="star" d="M100,30 L117,78 L170,78 L126,112 L143,160 L100,130 L57,160 L74,112 L30,78 L83,78 Z" style="display:none;" />
</svg>
gsap.registerPlugin(MorphSVGPlugin); // MorphSVGPlugin を有効化(SVGの形を変形させる)
gsap.to("#circle", {
morphSVG: "#star", // #circle のパスを #star の形に変形させる
duration: 1.5, // アニメーション時間は 1.5秒
ease: "power2.inOut" // ゆっくり始まり、ゆっくり終わる自然な動き
});
- SVGを、滑らかに別の形へトランジションします
☑️補足
#circle と #star はSVGの <path>
である必要があります。
Flip(レイアウト遷移)
<!-- CDN読み込みが必要 -->
<script src="https://cdn.jsdelivr.net/npm/gsap@3.13.0/dist/Flip.min.js"></script>
.card {
width: 150px;
height: 150px;
background-color: #6495ed;
border-radius: 10px;
transition: all 0.3s ease;
cursor: pointer;
}
.card.expanded {
width: 300px;
height: 300px;
background-color: #ff7f50;
}
gsap.registerPlugin(Flip); // Flipプラグインを登録(有効化)
const state = Flip.getState(".card");
// 変更前の .card の位置・サイズ・状態を記録
document.querySelector(".card").classList.toggle("expanded");
// .card に "expanded" クラスを付け外し(スタイル変化をトリガー)
Flip.from(state, {
duration: 0.8, // アニメーション時間(0.8秒)
ease: "power2.inOut" // ゆっくり始まり、ゆっくり終わる自然な動き
});
// 変更前後の差をもとに、なめらかに変化をアニメーションで再現
- ある要素の位置・サイズ・形状が変わったときに、その変化をなめらかにつないで見せることができます
DrawSVG(パス描画)
<!-- CDN読み込みが必要 -->
<script src="https://cdn.jsdelivr.net/npm/gsap@3.13.0/dist/DrawSVGPlugin.min.js"></script>
<svg viewBox="0 0 200 200">
<path id="path" d="M100,50 a50,50 0 1,0 0.1,0" />
</svg>
gsap.registerPlugin(DrawSVGPlugin); // DrawSVGPlugin を登録(SVG線の描画アニメ用)
gsap.from("#path", {
drawSVG: "0%", // 線を長さ0%から描き始める(=何も見えない状態から)
duration: 2 // 2秒かけて完全に描画される
});
- SVGの線が「描かれる」ようにアニメーションします
☑️補足
#pathは <path>
タグである必要があります。
その他プラグイン一覧
プラグイン | 用途 |
---|---|
ScrollSmoother | 滑らかなスクロール体験を実現 |
Draggable | 要素をドラッグ&ドロップ可能に |
ScrollToPlugin | 特定位置へスムーズスクロール |
Observer | タッチ/ホイール/スクロールイベントを簡単に検知 |
GSDevTools | アニメーションタイムラインをGUIで操作・デバッグ |
InertiaPlugin | ドラッグ後の慣性スクロール/アニメーション |
MotionPathPlugin | 要素をSVGパスに沿って動かす |
その他のプラグイン(必要に応じてCDN追加)
プラグイン名 | CDN例(必要なときのみ) |
---|---|
ScrollSmoother | <script src="https://cdn.jsdelivr.net/npm/gsap@3.13.0/dist/ScrollSmoother.min.js"></script> |
Draggable | <script src="https://cdn.jsdelivr.net/npm/gsap@3.13.0/dist/Draggable.min.js"></script> |
InertiaPlugin | <script src="https://cdn.jsdelivr.net/npm/gsap@3.13.0/dist/InertiaPlugin.min.js"></script> |
MotionPathPlugin | <script src="https://cdn.jsdelivr.net/npm/gsap@3.13.0/dist/MotionPathPlugin.min.js"></script> |
Observer | <script src="https://cdn.jsdelivr.net/npm/gsap@3.13.0/dist/Observer.min.js"></script> |
おわりに
GSAPのパラメータやプラグインを一通り押さえれば、動きのアイデアは無限大です。
まずはここに載せたサンプルをコピペ→変更→実験、のサイクルで慣れてみてください。
GSAP公式サイトにもたくさんの素敵なサンプルがあるのでぜひ試してみてください。
https://gsap.com/