为什么TouchEnd事件在快速滑动后会重复触发?
我在做移动端滑动删除功能时,给元素绑定了touchstart和touchend事件。但发现当手指快速滑动后突然抬起,touchend会触发两次,导致删除逻辑执行两次。代码逻辑看起来没问题,但测试多次还是这样:
element.addEventListener('touchstart', (e) => {
startX = e.touches[0].clientX;
});
element.addEventListener('touchend', (e) => {
if (Math.abs(endX - startX) > 50) {
console.log('执行删除'); // 这里会重复输出
}
});
我尝试过加标志位防重,但滑动速度过快时标志位还没来得及重置。是不是touchend在某些情况下会被浏览器自动触发两次?或者需要结合touchcancel处理?
记得根据实际需求调整时间间隔,300毫秒是个参考值。如果还遇到问题,可能需要结合touchcancel一起处理。