忽略上下鼠标按下事件

Ignore up and down mouse down events

我编写了我的第一个 npm 库,名为 flix 滑块 (https://www.npmjs.com/package/flix-slider),它有点基于 Netflix 风格的滑块。设计师希望滑块以某种方式运行,但我找不到任何符合我需要的东西,所以从头开始构建一个。

除拖动和触摸拖动外,一切正常。如果用户向上或向下拖动,我需要以某种方式 disable/ignore 。目前,如果他们向上或向下拖动,则会触发向左或向右拖动。我整天都在看这个,我这辈子都想不出如何阻止它,哈哈

如果用户向上或向下滚动,我能够解决问题,但我不确定如何使用该信息来阻止左右功能的触发。

$(document).on('mousemove', function (e) {
          dragMove(e)
        })

var dragMove = function (e) {
          if (oldPageY > e.pageY) {
            limit = true
          }

          if (dragging) {
            // console.log(oldPageY, e.pageY)

            if (oldPageX < e.pageX) {
              xDirection = 'next drag'
              if (limit) {
                $(fsTrack).addClass('fs-being-dragged') // disable items from being clicked
                nextItem(dragItemsToMove)
                limit = false
              }
              oldPageX = e.pageX - pageXOffset
            } else {
              xDirection = 'prev drag'
              if (limit) {
                $(fsTrack).addClass('fs-being-dragged') // disable items from being clicked
                prevItem(dragItemsToMove)
                limit = false
              }
              oldPageX = e.pageX + pageXOffset
            }

            return false
          }
        }

最终我想要实现的是只允许用户向左或向右移动鼠标。即让用户按下鼠标 -> 他们是向左还是向右移动 -> 调用函数

Currently, if they drag up or down it triggers a left or right drag.

这是一个片段,它通过仅跟踪事件的 MouseEvent.movementX 属性 来忽略向上或向下移动。

const ERROR_MARGIN = 3;

function dragMove(event) {
  console.log(event.originalEvent.movementX);

  setClear();
  var action = event.originalEvent.movementX < -ERROR_MARGIN ?
    "left" :
    event.originalEvent.movementX > ERROR_MARGIN ?
    "right" :
    "";

  $("#action").text(action);
}

$("#fsTrack").mousedown(function(e) {
  console.log(e.originalEvent.movementX);
  var action = e.originalEvent.movementX < 0 ? "left" : "right";
  if (action === "left" || action === "right") {
    console.log("drag start")
    $("#fsTrack").on('mousemove', dragMove);
  }
});

$("#fsTrack").mouseup(function(e) {
  console.log("drag stop");
  $("#fsTrack").off("mousemove", dragMove);
});

function setClear() {
  if (window.timeout !== undefined) {
    window.clearTimeout(timeout);
  }
  window.timeout = window.setTimeout(function() {
    $("#action").text("");
  }, 100);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<div>movement: <span id="action">stopped</span></div>
<div id="fsTrack" style="width:400px;height:40px;background-color:red;"></div>