如何防止在长按结束时触发点击?
How can you prevent a click from firing at the end of a long press?
我问是因为这种情况:
我将手指放在列表项上。 500ms
后触发锤子 press
事件,页面显示动作 sheet。 1s
之后,我举起手指,click
事件触发(常规点击,不是 Hammer 发出的点击)。那时我的手指在操作 sheet 背景上,它有一个自行关闭的点击处理程序。
我意识到使用 Hammer tap
事件来关闭动作 sheet 是可行的,因为它有一个 250ms
最大持续时间,但是动作 sheet 库使用click
事件。如果持续时间为 250ms
,有没有办法告诉浏览器不要触发点击?或者告诉浏览器不要发出发生的下一次点击?
您是否根据 hammer.js 页面关于禁用幻影点击的讨论实施了以下解决方案?
https://developers.google.com/mobile/articles/fast_buttons#ghost
我刚刚在 Ionic 中遇到了同样的问题:ActionSheet 在触摸结束后消失了。
我想出了以下解决方法:在 HammerJS 中使用 pointer-events: none
忽略 pressup
事件之后元素上的 click
事件。该解决方案利用了 click
事件在 pressup
事件之后立即在元素上触发的事实,因此我们能够通过处理 pressup
.
以某种方式阻止它
在全局样式中,我添加了以下助手 class:
.prevent-pointer-events {
pointer-events: none;
}
然后,在我处理 press
事件的同一元素上,我添加了一个新的 pressup
事件处理程序,它执行以下操作:
element.classList.add('prevent-pointer-events');
setTimeout(() => {
element.classList.remove('prevent-pointer-events');
}, 50); // after 50ms we are sure the "click" event was fired and ignored,
// so we can revert the class name back
请注意,此解决方案是本地解决方案,仅适用于一个元素,但可以扩展它以处理文档主体上的全局 pressup
事件。
我问是因为这种情况:
我将手指放在列表项上。 500ms
后触发锤子 press
事件,页面显示动作 sheet。 1s
之后,我举起手指,click
事件触发(常规点击,不是 Hammer 发出的点击)。那时我的手指在操作 sheet 背景上,它有一个自行关闭的点击处理程序。
我意识到使用 Hammer tap
事件来关闭动作 sheet 是可行的,因为它有一个 250ms
最大持续时间,但是动作 sheet 库使用click
事件。如果持续时间为 250ms
,有没有办法告诉浏览器不要触发点击?或者告诉浏览器不要发出发生的下一次点击?
您是否根据 hammer.js 页面关于禁用幻影点击的讨论实施了以下解决方案?
https://developers.google.com/mobile/articles/fast_buttons#ghost
我刚刚在 Ionic 中遇到了同样的问题:ActionSheet 在触摸结束后消失了。
我想出了以下解决方法:在 HammerJS 中使用 pointer-events: none
忽略 pressup
事件之后元素上的 click
事件。该解决方案利用了 click
事件在 pressup
事件之后立即在元素上触发的事实,因此我们能够通过处理 pressup
.
在全局样式中,我添加了以下助手 class:
.prevent-pointer-events {
pointer-events: none;
}
然后,在我处理 press
事件的同一元素上,我添加了一个新的 pressup
事件处理程序,它执行以下操作:
element.classList.add('prevent-pointer-events');
setTimeout(() => {
element.classList.remove('prevent-pointer-events');
}, 50); // after 50ms we are sure the "click" event was fired and ignored,
// so we can revert the class name back
请注意,此解决方案是本地解决方案,仅适用于一个元素,但可以扩展它以处理文档主体上的全局 pressup
事件。