为什么点击后会出现触摸启动事件
Why is touchstart event after click?
这里有一些奇怪的事情,我觉得它肯定在早期的移动浏览器中工作:在Android上的Chrome和iOS上的Safari中,似乎touchstart事件是在点击事件之后触发的,而不是之前。这是什么时候改变的?
一个简单的例子:
jQuery(function($) {
var touched = false;
$('#clicky').on('touchstart', function(evt){
touched = true;
evt.preventDefault();
})
.click(function(){
if (!touched) {
alert("somehow touch didn't fire")
}
});
})
运行这个小提琴,你会看到警报可以在Android和iOS上弹出,而它实际上不应该显示!
http://jsfiddle.net/quxnxu7d/2/
我在Android上通过Chrome运行它,它按照您的预期工作。 我向touchstart
处理程序添加了一个警报,它触发以确保它首先触发并且确实触发。
查看触摸事件 mdn 文章。文章特别提到:
在
touchstart
或系列的第一个touchmove
事件上调用 preventDefault() 可防止触发相应的鼠标事件
Click
是一个鼠标事件,所以它"应该"按您的预期工作(它对我有用)。我会验证事件确实在您的目标浏览器上乱序运行(使用 console.log()
而不是 alert()
)。如果是,这在浏览器/规格不完美的情况下是完全可能的,请尝试使用不同的鼠标事件,例如 mouseup
.我的猜测是,您将能够找到一个始终如一的活动。
祝你好运!
您是否尝试过使用mousedown
而不是click
?这样,您应该获得不同的触摸和单击事件,而无需任何双重触发。您可能还需要使用keydown
来保持此站点的可访问性。
在某些移动浏览器(例如 iOS Safari)上,物理点击和触发点击事件之间存在 300 毫秒的延迟我遇到了同样的问题,FastClick jQuery插件为我修复了它
看看快速点击
- 触摸启动事件未在iframe iOS 6中启动
- 使用触摸启动导航下拉菜单,以实现 IOS 功能
- 安卓键盘未打开绑定到触摸启动的输入标签
- 目标元素边缘的触摸启动会导致鼠标按下
- 触摸启动时显示为灰色的表单按钮
- 在第一次触摸启动事件时禁用所有点击事件是个好主意吗?
- 触摸启动触摸结束 asp.net 按钮未读取事件
- 触摸启动阻止按钮侦听器
- 触摸启动事件上的Javascript触发函数
- iPad触摸启动启动两次
- 绑定到触摸启动事件,导致自动对焦集中在Mobile Safari中的任何单击上
- 触摸启动与点击.引擎盖下发生了什么
- 触摸启动事件未在原来隐藏的按钮上工作
- 有没有一种方法可以使触摸启动事件不会触发点击事件
- 当事件保持静止时,防止触摸启动缓慢启动
- 触摸移动和触摸启动以及300ms延迟
- 响应式网站:为什么需要触摸启动而不是点击
- Famo.我们附加点击和触摸启动事件
- 获取Ipad触摸启动坐标
- 为什么点击后会出现触摸启动事件