- アニメーション
- JavaScript
【GSAP】Staggerで簡単に「ずらしアニメーション」を作ろう!

GSAPのStaggerは、同一の要素に対して、指定した秒数遅らせてアニメーションさせることができる機能です。一気に表示させるのではなく、少しずつ順番に表示させるため、少しリッチな表現にみせることができます。
この記事では、Staggerの基礎的な使い方から実際に動きを確認できるコード例までを紹介し、初心者でも理解しやすいように解説していきます!
目次
Staggerとは何か?基礎構造をご紹介
Staggerは、同一の要素に対して、指定した秒数遅らせてアニメーションさせることができる機能です。
ちなみにStaggerは「スタッガー」と読み、日本語で「ずれ」「よろめき」という意味です。
▼Staggerの基本的な書き方
gsap.to(".square", {
y: 100,
stagger: 0.5 // 各要素の開始時間を0.5秒ずつずらす
});
▼実際の動き
See the Pen
【GSAP】stagger_No1 by ishi (@qwwbetnz-the-typescripter)
on CodePen.
stagger: 0.5 と記述すると、各要素が0.5秒ずつ遅れてy軸方向に100px移動しているのがわかります。
このように、短い記述で要素の開始遅延時間を決めることができます。
Staggerでよく使う【プロパティ】
簡単に設定できるStaggerですが、もっと詳細に設定したい時には、プロパティを使用します。
▼Staggerでよく使うプロパティ
| プロパティ名 | 設定例 | 説明 |
|---|---|---|
| each | each: 0.5 |
各要素の開始時間を遅延。each: 0.5の実行結果はstagger: 0.5と同じ。 ※他のプロパティを使う場合、通常のstagger: 0.5という書き方ができないため、eachを使用する必要がある。 |
| amount | amount: 0.5 |
各要素のアニメーション間隔の合計時間。5つの要素に対してamount:1と記述した場合、1つあたり0.2秒ずつ遅延して開始される。 |
| from | from: 'center'from: 'end' |
アニメーションをどの要素から開始させるか。endにすると、最後の要素から開始される。 |
| grid | grid: 'auto'grid: '[3,3]' |
要素がグリッド状に並んでいる場合、これを使用すると綺麗に要素がアニメーションされる。[3,3]のように行数と列数を指定するか、autoで自動計算させるかを指定する。 |
▼コード例
stagger: {
each: 0.5,
from: "center",
},
このように、stagger:{}の中に使用するプロパティを記述します。
fromでアニメーション順を指定
fromは「どの要素からアニメーションを開始させるか」を指定できます。
▼fromの値一覧
| 値 | 説明 |
|---|---|
center |
中央の要素 |
start |
最初の要素 |
end |
最後の要素 |
edges |
両端の要素 |
random |
ランダム |
0 , 5 など |
0は最初の要素、5は最初から数えて6番目の要素(0から始まる為) |
▼edgesを指定した例
See the Pen
【GSAP】stagger_No3 by ishi (@qwwbetnz-the-typescripter)
on CodePen.
edgesを指定した場合、両端から開始され、中央に向かって進んでいきます。
▼3を指定した例
See the Pen
【GSAP】stagger_No3 by ishi (@qwwbetnz-the-typescripter)
on CodePen.
3を指定した場合、最初から数えて4番目の要素から開始され、その両隣へと進んでいきます。
gridでグリッド状の要素をアニメーション
要素がグリッド状に並んでいる場合、gridを使用すれば綺麗にアニメーションさせることができます。
▼コード例
stagger: {
each: 0.4,
grid: '[3,3]',
}
効果については見た方が分かりやすいと思いますので、こちらをどうぞ。
▼gridを使用しない例
See the Pen
【GSAP】stagger_No5 by ishi (@qwwbetnz-the-typescripter)
on CodePen.
▼gridを使用した例
See the Pen
【GSAP】stagger_No6 by ishi (@qwwbetnz-the-typescripter)
on CodePen.
どちらも3番目の要素からアニメーションするよう指定しています。
- gridを使用しない例 : 3番目から始まり、不規則に広がっているように見えてしまいます
- gridを使用する例 : 3番目から、綺麗に周りに広がっていくのが分かります
このように、グリッド状に並んでいる要素に対しては、gridを使用するのがおすすめです!
関数を渡して開始タイミングを設定する
Staggerは要素を順番にアニメーションさせる便利な機能ですが、単純にstagger: 0.2のように数値を渡すだけだと、全ての要素が均等に順番に動きます。
そこで、関数を使うと、各要素のアニメーション開始タイミングを自由に設定できるようになります。
▼コード例
gsap.to(".square", {
y: 50,
opacity: 1,
duration: 0.5,
stagger: function(index, target, list) {
// index番目の要素の開始遅延を計算
return index * 0.1 + Math.random() * 0.9;
},
ease: "power1.out"
});
staggerに関数を渡しました。この関数は、各要素ごとに1回ずつ呼ばれ、開始遅延を返します。
関数にすることで、ランダム制の追加などが可能になります。
-
index * 0.1→ 順番に0.1秒ずつ遅れてアニメーション開始 -
Math.random() * 0.9→ ランダムで最大0.9秒の遅延を追加
▼実際の動き(再度見たい場合は、リロードしてください)
See the Pen
Untitled by ishi (@qwwbetnz-the-typescripter)
on CodePen.
まとめ
Staggerを活用すれば、要素を順番に、指定時間分遅延させてアニメーションさせることができます。
ぜひ、この記事をもとにアニメーション制作に挑戦してみてください!
【関連記事】
▼GSAPの導入方法や、アニメーションの作り方を知りたい方はこちら
GSAP入門編|アニメーションの作り方を解説
▼GSAPの基礎や特徴、事例を知りたい方はこちら
GSAPの基礎と特徴を徹底解説|事例から学ぶ活用法
ドコドア エンジニア部
このブログでは、アプリ開発の現場で培ったフロントエンド、バックエンド、インフラ構築の知識から生成AI活用のノウハウまで、実践的な情報をアプリ開発に悩む皆様へ向けて発信しています!
【主な技術スタック】 Flutter / Firebase / Svelte / AWS / GCP / OpenAI API