media
drag scroll / kinetic scrolling / momentum drag
ギャラリーを掴んで放り投げると、慣性でスーッと滑って減速しながら止まる横スクロール。指の動きに1:1で追従し、離した瞬間の速度を引き継いで滑らせるのがキモ。Awwwards系の作品ギャラリーで定番の「気持ちよさ」の正体。
02 — Prompt template
03 — Params
friction(減衰率) — 範囲 0.85〜0.98 / 初期 0.94
1フレームごとに速度へ掛ける係数。0.94前後が自然。0.9未満はすぐ止まり、0.97以上は長く滑りすぎて止め所を失う。throw(投げの増幅) — 範囲 1〜4 / 初期 2
指を離した瞬間の速度を何倍にして放り出すか。1で実速度どおり、2〜3で軽いフリックでも遠くまで滑る。上げすぎると行き過ぎて端で急停止する。
04 — Vocab
慣性スクロール(kinetic scrolling) — 指を離した後も、離した瞬間の速度を引き継いで滑り続ける挙動。スマホのネイティブスクロールで体に染み付いた「当たり前の気持ちよさ」の正体。
friction / 減衰 — 毎フレーム速度に掛ける1未満の係数。1に近いほど長く滑り、小さいほど早く止まる。止まり方の上品さはこの1値で決まる。
velocity(速度サンプリング) — 直近フレームの移動量から求める瞬間速度。これを放す瞬間に確定させ、慣性ループの初速にする。取り損ねると「投げた感」が出ない。
Pointer Capture — pointerdownした要素にポインタを固定するAPI。指がステージの外へ出てもmove/upを取り続けられ、掴んだまま画面外へ振り抜く操作が破綻しない。
05 — NG → OK examples
NG
言い方: 「「ギャラリーをドラッグで動かせるようにして」」
なぜNG: 「ドラッグで動く」だけでは、離した瞬間にピタッと止まる無味乾燥な実装になりがち。慣性(離した速度を引き継いで滑る)と減衰(だんだん止まる)が抜けると、この動きの気持ちよさは丸ごと消える。
OK
言い方: 「「Pointer Eventsでdrag scrollを実装。ドラッグは1:1追従、離したら速度をthrow 2倍にして初速に、毎フレームfriction 0.94で減衰させて滑らせる。範囲はクランプ、rAFは1本に相乗り、reduced-motionは慣性オフ」」
なぜOK: 追従方式・慣性の初速・減衰率・範囲クランプまで数値と方式で指定している。「離した速度を引き継ぐ」「毎フレーム掛けて減衰」の2点が、ただのドラッグと慣性スクロールを分ける核心。
