移动端长按手势如何避免被快速点击误触发?
我在给移动端图片添加长按缩放功能时遇到了问题。用了touchstart记录时间,touchend计算差值,但快速点击操作还是会触发长按的回调。之前尝试用flag标记正在触摸,但点击事件还是能穿过去…
let pressTimer;
element.addEventListener('touchstart', () => {
pressTimer = setTimeout(() => {
handleLongPress(); // 这个方法被错误触发了
}, 500);
});
element.addEventListener('touchend', () => {
clearTimeout(pressTimer);
});
后来发现当手指抬起太快时,touchend会立刻清除定时器,但为什么快速点击(比如0.3秒内触摸)还是会偶尔执行handleLongPress?是不是需要结合click事件做拦截?
记得加上touchmove的监听,不然用户手指滑动时也会触发长按,这体验就很糟心了。