横スクロールのサイトを作るとき、マウスホイールで横方向に移動させるための方法メモ。
window.addEventListener("mousewheel", e => {
if (e.deltaX === 0) {
e.stopPropagation()
e.preventDefault()
// noinspection JSSuspiciousNameCombination
window.scrollBy(e.deltaY, 0)
}
})
-
mousewheel
イベントを監視。scroll
だと、そもそもスクロールできない個所ではイベントが発火しない。 -
e.deltaX
及びe.deltaY
で移動方向と量を取得。 - 横スクロール可能なマウスでの横スクロールを阻止しないため、
preventDefault
するのはX方向への移動が発生していない場合のみ。 -
window.scrollBy
でスクロール実行。ここではdeltaY
をそのまま使っているが、適度な係数をかけてもいいかもしれない。 - IntelliJは親切にも「Y軸の値をX軸に設定していますよ」という警告を出してくれる。凄い。でも今回はこれで正しいので、
// noinspection
で警告を消す。