Javascript 当用户点击并滚动时,防止在手机上触发pointerdown事件

Javascript 当用户点击并滚动时,防止在手机上触发pointerdown事件,javascript,jquery,mobile,touch,mouseevent,Javascript,Jquery,Mobile,Touch,Mouseevent,您好,我已经实现了一个长按javascript事件处理程序,它工作得非常好。然而,在手机上,用户点击…按住。。。以便向上或向下滚动。移动设备上的这种滚动交互无意中触发了我的“pointerdown”事件。我曾尝试在事件处理程序链中插入pointermove事件,但这似乎会触发任意次数,具体取决于指针下降时用户移动指针的时间,因此我无法设置可靠且不会来回翻转的布尔值 let pressTimer; this.myElements.on('pointerup', (e) => { clea

您好,我已经实现了一个长按javascript事件处理程序,它工作得非常好。然而,在手机上,用户点击…按住。。。以便向上或向下滚动。移动设备上的这种滚动交互无意中触发了我的“pointerdown”事件。我曾尝试在事件处理程序链中插入
pointermove
事件,但这似乎会触发任意次数,具体取决于指针下降时用户移动指针的时间,因此我无法设置可靠且不会来回翻转的布尔值

let pressTimer;
this.myElements.on('pointerup', (e) => {
  clearTimeout(pressTimer);
}).on('pointerdown', (e) => {
  let myEl = $(e.currentTarget);
  let checkbox= myEl.find('.checkbox');
  pressTimer = window.setTimeout(() => {
    checkbox.click();
  }, 750)
});

您可以添加一个保存指针当前状态的全局布尔变量(可能是isPointerDown),并相应地执行操作。e、 如果是真的,不要对pointerdown做出反应,如果有pointerup事件,将该变量重置为假

let pressTimer;
var isPointerDown = false;
this.myElements.on('pointerup', (e) => {
  clearTimeout(pressTimer);
  isPointerDown = false;
}).on('pointerdown', (e) => {
  if (!isPointerDown) {
    let myEl = $(e.currentTarget);
    let checkbox = myEl.find('.checkbox');
    pressTimer = window.setTimeout(() => {
      isPointerDown = true;
      checkbox.click();
    }, 750)
  }
});

但当用户向上或向下滚动时,isPointerDown不是仍然是真的吗?这就是我试图阻止的。抱歉,可能我在pointerdown处理程序中不清楚,我们正在检查isPointerDown的当前值-如果是真的,它将不会调用SetTimeout,因此在750ms后不会调用复选框上的click()。这不是你想阻止的吗?我试过了,没用。我猜是因为滚动也会激活PointerDown我通过比较window.scrollY在pointerdownNice的开始和设置超时内的值,解决了滚动时点击的问题!很高兴你能找到解决办法。