Javascript 当用户点击并滚动时,防止在手机上触发pointerdown事件
您好,我已经实现了一个长按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
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的开始和设置超时内的值,解决了滚动时点击的问题!很高兴你能找到解决办法。