🔛

JavaScriptで縦スクロールを横スクロールに変換する

2023/05/05に公開

横スクロールできる要素で、マウスホイール(縦スクロール)でも横にスクロールできるようにしたかったのでメモしておきます。

デモ

コード

const scrollElement = document.querySelector("#scroll");

scrollElement.addEventListener("wheel", (e) => {
  if (Math.abs(e.deltaY) < Math.abs(e.deltaX)) return;
  e.preventDefault();
  scrollElement.scrollLeft += e.deltaY;
});

if (Math.abs(e.deltaY) < Math.abs(e.deltaX)) return;の行は入れなくても動作しますが、トラックパッドで直接横スクロールをした際に挙動がおかしくなるので、横スクロールされた際は処理をしないようにしています。

ちなみに、このままだと一番右までスクロールしたあとに下にスクロールが行かなくなってしまう / 一番左までスクロールしたあとに上にスクロールが行かなくなってしまうので、前後にコンテンツがある場合はe.preventDefault();前の行に以下を挿入すると動きました。

const maxScrollLeft = scrollElement.scrollWidth - scrollElement.clientWidth;
if (
  (scrollElement.scrollLeft <= 0 && e.deltaY < 0) ||
  (scrollElement.scrollLeft >= maxScrollLeft && e.deltaY > 0)
)
  return;

Discussion