ページ遷移・画面切り替え系

Grid Shutter Image Transition React

画像ビューの切り替え時に、格子状のセルを横方向へ閉じて開くシャッター遷移です。

Y
Yutaka Kizaki
@junkbranding
2026年6月9日
読了時間: 6分
構成 / File Structure
</>Code Viewer
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135

はじめに

画面全面に並べた小さな矩形を scaleX で開閉するシャッターです。

この記事では next-transition-router への依存を外し、React の state で画像ビューを切り替える最小デモにしています。ページ遷移へ戻す場合も、runShutter() の中で state を変えている箇所をルーターの next() に置き換えれば同じ考え方で使えます。

今回作るもの

  • 主役: 行ごとに方向が変わるグリッドシャッター
  • トリガー: ボタンで画像ビューを切り替える
  • 対象要素: 画面を覆う ROWS x COLS のセル
  • 再利用先: ページ遷移、ギャラリー切り替え、作品詳細のビュー変更

セル自体は見た目の要素なので React が担当し、GSAP は blockRefs.current に入った DOM の scaleX だけを動かします。これで DOM 生成とアニメーションの責務が分かれます。

動きの組み立て

最初の to() では、行ごとにセルを横へ広げて画面を覆います。偶数行は左から、奇数行は右から始まるように transform-originstagger.from を揃えています。

画面が覆われたタイミングで setActiveIndex(nextIndex) を呼び、裏側の画像を差し替えます。その後、全セルを中央起点の stagger で閉じることで、切り替わった画像が見える構成です。

調整しやすい値

  • ROWS: 行数。少ないほど大きな面で切り替わる
  • COLS: 列数。多いほど細かいシャッターになる
  • each: セルごとの遅延。大きいほど波が強くなる
  • duration: 閉じる速さと開く速さ

画像は添付ファイル内のものを使わず、Unsplash のフリー写真 URL に差し替えています。

タグ

ReactGSAPアニメーショントランジションUI

関連記事