scroll
smooth scroll / lerp scroll
スクロール入力に慣性(遅れ)を持たせ、ページ全体をぬるっと滑らせる演出。Lenis等のライブラリの中身はlerpによる補間で、ハイエンドサイトの「上質さ」の多くはここから来ている。
02 — Prompt template
03 — Params
lerp(補間係数) — 範囲 0.03〜0.3 / 初期 0.1
毎フレーム、目標との差を詰める割合。0.1前後が定番。小さいほど遅れが大きく「ぬるっ」とし、0.2を超えるとほぼ素のスクロールに近づく。multiplier(スクロール量の倍率) — 範囲 0.5〜2 / 初期 1
入力1に対して何倍進めるか。1が基本。上げると軽快に見えるが、手応えと画面のズレは酔いの原因になるので0.8〜1.2に留める。
04 — Vocab
lerp(線形補間) — current += (target − current) × 係数。毎フレーム差の一定割合を詰めるので、近づくほど減速する自然なイージングになる。
transformラッパー方式 — 実スクロールはスペーサーに任せ、見た目だけラッパーのtransformで遅らせる構造。Lenis・Locomotive Scrollの基本原理。
scroll hijacking — ネイティブスクロールを奪って自前制御すること。慣性表現での安易な採用は操作性・アクセシビリティを壊す悪手とされる。
デルタタイム補正 — lerpをフレーム時間で補正すること。補正なしだと120Hz端末では60Hzの倍の速さで追いつき、機種によって体験が変わってしまう。
05 — NG → OK examples
NG
言い方: 「「このサイトみたいにスクロールをぬるぬるにして」」
なぜNG: wheelイベントをpreventDefaultしてスクロールを乗っ取る実装(scroll hijacking)が返ってきがち。スクロールバー・キーボード操作・アクセシビリティが全滅し、iOSで破綻する。遅れの強さも決まらない。
OK
言い方: 「「Lenis方式のsmooth scrollを。実スクロールは残してラッパーをtranslate3dで追従、lerp 0.1(dt補正あり)、reduced-motionで無効化。sticky/fixedな要素はラッパーの外に」」
なぜOK: 「実スクロールを残す」方式の指定が操作性と堅牢性を決める。lerp値・dt補正・reduced-motion無効化・stickyの罠まで押さえており、ライブラリを使う場合の設定指示としてもそのまま通じる。
