H5W3
当前位置:H5W3 > 其他技术问题 > 正文

【Web前端问题】移动端页面touch会穿透,这是bug么?

touch事件会穿透页面,电脑上chrome模拟不会有,但手机上实际操作会出现

回答:

穿透(点穿)是在mobile各种浏览器上发生的常见的bug。可能是由click事件的延迟或者事件冒泡导致。

移动web开发常用的Zepto库中的touch和tap事件就会有点穿的bug(Zepto的事件都绑在Document上)。

常用的解决方案如下:

1 使用fastclick,这个可以非常完美的解决点穿问题。
2 在touchend事件回调中加入preventDefault, 并在下一层中加上pointer-events:none。

回答:

移动端的click都是touch之后,才会模拟触发。
触发的顺序是
touchstart
touchmove
touchend
mousedown
mousemove
mouseenter
click
在重叠的区域里,被遮盖的元素绑定click,遮盖的元素绑定touch事件,且touch后遮盖的元素会隐藏的话,就会造成穿透,因为click是在touch之后延迟触发的,浏览器会误认为是在遮盖的元素上触发了click。
最好的解决方案是 自己通过touchstart,touchmove,touchend,来模拟一个click(tap)事件,这样除了防止穿透外,事件响应速度也会提高。

回答:

今天我也碰到了这个问题, 最后用区域点击来替代.
假如发生穿透(或者说你需要点击)的元素在一个固定的位置.
那你可以获取这个元素的位置和大小,
然后在点击的时候获取手指的坐标, 确定这个坐标在元素所处的位置, 你就可以执行相应的操作.
期间会用到 touches[0].pageX, touches[0].pageY, document.body.scrollTop 这三个属性.

这种替代方法适用于少量的模拟, 比如我在做的这个, 位置固定在顶部, 只有打开和关闭两种情况.
菜单关闭的情况下按钮位于右上角,
菜单打开以后, 按钮被推到偏左上角.
这些位置都是可以计算得出来的.
图片描述

图片描述

回答:

使用fastclick插件即可解决。

本文地址:H5W3 » 【Web前端问题】移动端页面touch会穿透,这是bug么?

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址