ドラッグ横スクロール

インタラクション Medium #js #drag #scroll

横並びのカードをマウスで掴んで左右に流せる、ドラッグ横スクロールのパーツです。 overflow-x:auto で横スクロール領域を作り、 mousedown で掴んだ位置を記録、 mousemove でその差分だけ scrollLeft を動かして追従させています。

▶ プレビュー

解説

横並びのカードをマウスで掴んで左右に流せる、ドラッグ横スクロールのパーツです。overflow-x:autoで横スクロール領域を作り、mousedownで掴んだ位置を記録、mousemoveでその差分だけscrollLeftを動かして追従させています。掴んでいる間はcursor:grabからgrabbingへ切り替え、いま操作中だと分かるようにしているのが体験上のポイントです。

こんなときに便利

  • サムネイルや商品カードを横並びで見せたいギャラリー
  • カテゴリーやタグを横一列に並べる絞り込みバー
  • スクロールバーを出したくない横長のカルーセル風一覧

scrollbar-width:none::-webkit-scrollbarの非表示でバーを隠し、すっきり見せています。カード幅はflex:0 0 140pxの値で固定しているので、ここを変えれば1枚あたりの大きさを調整できます。スマホは指でのスワイプが標準で効くため、本スクリプトは主にPCのマウス操作を補う役割です。バーを隠す場合は「横に流せる」ことが伝わるよう、端に余白やぼかしを足すと迷いません。

よくある質問

カード1枚の幅を変えたいです。
CSSのカード要素に指定した flex:0 0 140px の 140px を変更します。数値を大きくすると1枚が広く、小さくすると狭くなり、横に並ぶ枚数も変わります。
スマホでもドラッグできますか。
スマホでは指でのスワイプで横スクロールが標準的に効くため、そのまま流せます。このスクリプトはマウスでも掴んで動かせるようにするための、主にPC向けの補助です。
追加日:2026-05-16
← すべてのスニペットへ戻る