[jQuery]マウスドラッグの横スクロール

2月 23, 2023

最近スマホでよく見る要素の横スクロールデザイン。
PCでの操作方法は三角の矢印をだして横スクロールさせたり、
自分のところでは横スクロールバーを初期設定で非表示にし、要素に触れたらほっそいスクロールバーを表示、スクロールバーの上をhoverしたら太めのスクロールバーになり掴める、という仕様。
(ノートPCやMacのトラックパッドではスマホと同じようにフリックでスクロール可能)
だったのですが、最近はマウスドラッグ(マウスクリックで掴んで)横スクロールが出来るものが増えていたので記述ブログを参考にしてTOPページの新着商品の表示に導入しました。

// スクロールのドラッグ有効化
jQuery.prototype.mousedragscrollable = function () {
  let target;
  $(this).each(function (i, e) {
    $(e).mousedown(function (event) {
      event.preventDefault();
      target = $(e);
      $(e).data({
        down: true,
        move: false,
        x: event.clientX,
        y: event.clientY,
        scrollleft: $(e).scrollLeft(),
        scrolltop: $(e).scrollTop(),
      });
      return false;
    });
    $(e).click(function (event) {
      if ($(e).data("move")) {
        return false;
      }
    });
  });
  $(document)
    .mousemove(function (event) {
      if ($(target).data("down")) {
        event.preventDefault();
        let move_x = $(target).data("x") - event.clientX;
        let move_y = $(target).data("y") - event.clientY;
        if (move_x !== 0 || move_y !== 0) {
          $(target).data("move", true);
        } else {
          return;
        }
        $(target).scrollLeft($(target).data("scrollleft") + move_x);
        $(target).scrollTop($(target).data("scrolltop") + move_y);
        return false;
      }
    })
    .mouseup(function (event) {
      $(target).data("down", false);
      return false;
    });
};
$(".mousedrug").mousedragscrollable();

jQueryの参考コードをフッターのスクリプト用ブロックそのままコピペしました。(助かってます、ありがとうございます)
一番下のclass名(.mousedrug)を要素に付与すればマウスドラッグでの横スクロールが可能になります。
横スクロールする要素の大枠(wrap)にclassを追加で付与しました。(スマホのフリック用に-webkit-overflow-scrolling: touch;も同じ要素の大枠に追加している)
大変助かりました参考にさせて頂いたサイトは下記になります。

You Might Also Like

0 コメント

Popular Posts

About Me

Flickr Images