📝 はじめに
このアニメーションは、ページを開いた瞬間の「プリローダーからヒーローへの導入」を扱います。ローディングを単なる待ち時間で終わらせず、円形のカラーリビールとフードアイテムの動きで、ブランドの世界観を一気に見せる場面で役立ちます。
この記事では、見た目の派手さよりも、どの要素をどの順番で動かすのか、なぜプリローダーとヒーローをレイヤーで分けるのか、Reactでどうやって1本のGSAP timelineを安全に片付けるのかを重視します。元は素のHTML + module scriptだった実装を、責務を分けたReactコンポーネントへ移植しています。
🎯 今回作るもの
今回作るのは、ページ全体の完成演出ではなく、開いた瞬間だけを担当する導入リビールです。
- 主役: 円形clip-pathの多層カラーリビール + 放射状に散るフードアイテム
- トリガー: page load(
document.fonts.readyを待って開始) - 対象要素: リビール面 / フード画像4枚 / ロゴ / ヒーロー見出し(SplitText)
- 再利用先: 飲食・物販系のLP、キャンペーンページ、ブランドサイトのオープニング
🧩 コンポーネント設計
1つの Demo に処理を詰め込みますが、頭の中では役割を分けて考えます。
-
Demo
- サンプル全体の親コンポーネント
rootRefを持ち、アニメーションの影響範囲をこのツリー内に閉じる
-
View / DOM
- プリローダー層(リビール面・アイテム・ロゴ)とヒーロー層(nav・見出し・フッター・メインビジュアル)を別レイヤーで組む
- フード画像は
data:SVGで自己完結させ、外部画像に依存しない
-
Animation
document.fonts.readyを待ってから1本のgsap.timeline()を構築- SplitTextで文字・単語・行を分割し、順番に開放する
-
Style
z-indexでプリローダー(2) > nav(1) > hero(0) の重なりを固定clip-path: circle(...)の初期状態や、各要素の初期scale/opacityを用意
🛠️ 実装のポイント
-
DOMとCSSの設計意図
- プリローダーとヒーローを重ねて置き、リビール完了後に
display: noneでプリローダーを畳む - リビール面は4枚重ね、
--base-200〜500の色を層ごとに変えて、円が開くたびに色が切り替わって見えるようにする - フード画像は
object-fit: containにして、SVGの余白を保ったまま散らす
- プリローダーとヒーローを重ねて置き、リビール完了後に
-
GSAP / SplitText の責務
- GSAPは時間制御・順番・stagger・退場のイージングに専念する
- SplitTextは「文字列をアニメ可能な単位へ割る」ことだけに使い、
navは words、h1は chars、footerは lines と、粒度を要素ごとに変える maskオプションで、はみ出した文字を親側でクリップする
-
タイムラインとパラメータ
stagger: 0.25(リビール面)で円が次々に開く間隔を作る'-=0.55'や'<0.075'の相対ラベルで、アイテムの散開を少しずつ重ねる- 退場は
scale: 2.5+power2.inで、画面外へ吸い込むように加速させる - 見出しは
elastic.out(0.75, 0.25)で、着地に弾みを持たせる
-
Reactでのクリーンアップ
rootRefで影響範囲を限定し、gsap.context(fn, rootRef)で生成物をまとめる- アンマウント時に
context.revert()で全アニメーションを解除する - SplitTextは
context.revert()では戻らないので、splitsに貯めて個別にsplit.revert()する document.fonts.readyの解決前にアンマウントされても壊れないよう、cancelledフラグでガードする
💡 使いどころとカスタマイズ
-
最適なユースケース
- 飲食・EC・キャンペーンLPのオープニング
- ブランドロゴを主役にしたスプラッシュ画面
- 「読み込み → 世界観提示 → ファーストビュー」を一続きで見せたい場面
-
調整ダイヤル
itemTargetsのx/y/rotationを変えると、アイテムの散らばり方が変わります。EXIT_DISTANCEを大きくすると、退場時により遠くへ吹き飛びます。- リビール面の
staggerを小さくすると、色の切り替えが素早くなります。 - 見出しの
staggerを大きくすると、文字が1つずつ立ち上がる印象が強くなります。 - 浮遊 tween の
durationとyを変えると、待機中のふわふわ感を調整できます。
🔧 発展させるなら
この導入部を土台に、段階的に足していけます。
- まずはプリローダーの円形リビールとロゴ表示だけを動かす
- 次にフードアイテムの散開と浮遊を足す
- アイテムのズーム退場とヒーロー開放をつなぐ
- SplitTextの粒度(words / chars / lines)を要素ごとに調整する
- 必要ならLenisやScrollTriggerを足して、ヒーロー以降のスクロール演出へ接続する
最初から全部を入れず、レイヤーと責務を分けたまま1つずつ足すことで、壊れにくく再利用しやすい導入リビールになります。