Android 4.0.x 浏览器不触发 ontouchend 事件的bug

10 篇文章 0 订阅
4 篇文章 0 订阅

问题是这样的,使用 touch* 事件时,在 Android 4.0 上面的浏览器手指在 a 元素(或者其他任何元素)上做滑动操作,然后手指离开,结果不会触发 touchend 事件。同样的操作在 Android 2.x / ios 却会会正常触发 touchend 事件。到 touchmove 事件之后就终止掉,简单说,就是 touchend 事件丢失。天呐~无疑这是一个非常严重的bug——因为这是一个极其基础的事件,不可或缺!~My God~

已经有许多人把该问题 report 了,详见:

怎么破?在 touchmove 事件中 e.preventDetault() 居然就可以。

但是简单调用 e.preventDetault() 会导致另外一个问题,就是阻止了屏幕上下滚动的 scorll 事件。




原文链接



监听一个 DOM 元素的 touchstart, touchmove, touchend 事件.
如果只是 touch 一下这个 DOM 元素, 会触发 touchstart, touchend, 很正常.
如果按住这个 DOM 元素, 滑动一下后放手, 发现只会触发 touchstart, touchmove, 而且 touchmove 没有触发多次.
因此这个bug的触发点就是:
如果触发了 touchmove, touchend 就不会被触发了, 而且 touchmove 没有持续触发.
在网上收集了一些资料后发现此乃移动浏览器上的bug.
> On Android ICS if no preventDefault is called on touchstart or the firsttouchmove,
> further touchmove events and the touchend will not be fired.

如何修复这个bug
----------------
很简单, 只要在 touchstart 的时候调用下 event.preventDefault(), 即可让其他事件都正常被触发了!


原文链接


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值