javascript - 忽略向上和向下鼠标按下事件

标签 javascript jquery drag mousemove

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

除了拖动和触摸拖动之外,一切都运行良好。如果用户向上或向下拖动,我需要以某种方式禁用/忽略。目前,如果向上或向下拖动,则会触发向左或向右拖动。我一整天都在看这个,我一生都不知道如何阻止它,哈哈

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

$(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>

关于javascript - 忽略向上和向下鼠标按下事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57703069/

相关文章:

javascript - 修改javascript数组并将其插入数组就是复制到数组中的每个元素

javascript - AJAX 在按下按钮之前不会自动更新

java - 如何在 Java GUI 中使用鼠标光标拖动图像?

c# - 如何停止在 wpf 数据网格上拖动选择

delphi - 如何防止某个Virtual StringTree NodeLevel被拖拽?

javascript - ajax 响应中未调用 Dojo 就绪函数

javascript - 使用 javascript 对项目列表进行排序

javascript - Ember.js 订单有很多 child

javascript - 在 IE/Chrome 中动态更改嵌入的视频 src(在 Firefox 中工作)

jquery - statechange 加载导致同一页面多次加载