パララックス系

Infinite Parallax Loop Gallery

縦方向に循環するフルスクリーン画像ギャラリーへ、ScrollTriggerのパララックスを重ねるReact実装です。

Y
Yutaka Kizaki
@junkbranding
2026年5月27日
読了時間: 7分
構成 / 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
136
137
138
139
140

📝 はじめに

この実装は、joebentaylor1995/infinite-scroll-with-parallax の Lenis + GSAP による無限スクロール表現を、記事内で試しやすい React コンポーネントへ置き換えたものです。元のデモは Lenis の infinite: trueScrollTrigger.scrollerProxy() で滑らかな循環を作っていますが、ここでは依存を増やさず、同じスライド群を3セット並べて中央セットへ戻すことで終端を隠しています。

画像は通常のスクロール量より大きめの高さで敷き、yPercent: -18 から 18 へ動かしています。セクション自体は一画面ずつ進むのに、画像だけが少し遅れて抜けていくため、ギャラリーの切り替わりに奥行きと余韻が生まれます。

🛠️ 実装のポイント

  • スクロール領域をコンポーネント内に閉じる .loop-scrollerheight: 100svhoverflow-y: auto を与え、ページ全体ではなくデモ内だけでスクロールを完結させています。これにより、記事ページの通常スクロールと干渉しにくく、ScrollTrigger 側も scroller にこの要素を渡すだけで管理できます。
  • 3セット複製して中央セットへ戻す slides を3回複製し、初期表示を真ん中のセットへ移動します。スクロール位置が上端側または下端側へ近づいたら、同じ見た目の位置へ cycleHeight 分だけ戻すため、ユーザーには連続したスクロールとして見えます。
  • React生命周期におけるコンテキスト管理 gsap.context() の中で ScrollTrigger、resize、scroll イベントをまとめ、返り値でイベントリスナーを外しています。最後に context.revert() を呼ぶことで、コンポーネントのアンマウント時に GSAP のインラインスタイルや ScrollTrigger もまとめて破棄できます。

💡 使いどころとカスタマイズ

  • 最適なユースケース: 写真家や建築、ファッション、ホテル、イベント告知など、ビジュアルを大きく見せながら「まだ続く」感覚を作りたいギャラリーに向いています。
  • 調整ダイヤル(パラメーター変更のヒント):
    • yPercent-10 / 10 に変更すると、視差が弱まり、落ち着いたギャラリーになります。
    • cycleHeight * 0.5cycleHeight * 1.50.35 / 1.65 に寄せると、ループ補正のタイミングが端に近づき、長くスクロールできる感覚になります。

タグ

GSAPScrollTriggerJavaScriptCSSアニメーションスクロールUX

関連記事