Open WangXiZhu opened 5 years ago
一个固定定位元素A绑定了touchstart事件,上层层元素B(该元素已经设置display:none,但是z-index比当前的元素高)绑定click事件。触发A的touchstart 之后会执行逻辑将B的display改为block。但这时候B的click事件会被触发?
e.preventDefault
推荐
A从被B挡住,而且由于移动端click还有延迟200-300ms的关系,当系统要触发click的时候,发现在用户点击的位置上面,目前离用户最近的元素是B,所以就直接把click事件作用在B元素上面了。所以上面的解决方式只是避免这段延时时间内距离用户最新元素B的展示。
https://www.jianshu.com/p/dc3bceb10dbb
表现
一个固定定位元素A绑定了touchstart事件,上层层元素B(该元素已经设置display:none,但是z-index比当前的元素高)绑定click事件。触发A的touchstart 之后会执行逻辑将B的display改为block。但这时候B的click事件会被触发?
如何修复
e.preventDefault
,阻止了浏览器继续处理触摸(和鼠标)事件推荐
原因
A从被B挡住,而且由于移动端click还有延迟200-300ms的关系,当系统要触发click的时候,发现在用户点击的位置上面,目前离用户最近的元素是B,所以就直接把click事件作用在B元素上面了。所以上面的解决方式只是避免这段延时时间内距离用户最新元素B的展示。
参考