![](/img/trans.png)
[英]Why this Javascript plugin use 'touchstart' instead of 'click' event for mobiles
[英]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上弹出,它应该实际上永远不会显示!
我通过Android上的Chrome运行它,它按照您的预期运行。 我向touchstart
处理程序添加了一个警告,并且它被触发以确保它首先被触发并且确实已经触发。
看看触摸事件mdn文章 。 文章特别提到:
在
touchstart
上调用preventDefault()或者系列的第一个touchmove
事件会阻止相应的鼠标事件触发
Click
是一个鼠标事件,因此它“应该”按预期工作(它对我有效)。 我将验证事件确实在命令浏览器中运行不正常(使用console.log()
而不是alert()
)。 如果它们是完全可能的,不完美的浏览器/规格,尝试使用像mouseup
一样的不同鼠标事件。 我的猜测是,你将能够找到一致的事件。
祝好运!
你尝试过使用mousedown
而不是click
吗? 这样你就可以获得不同的触摸事件和点击而不需要任何双击。 您可能还需要使用keydown
来保持此站点的可访问性。
在某些移动浏览器(例如iOS Safari)上物理点击和点击事件触发之间有300毫秒的延迟我遇到了同样的问题而FastClick jQuery插件为我修复了它
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.