前端常见的问题

411 阅读1分钟
  1. click点击事件延时300ms、穿透

表现

监听元素 click 事件,点击元素触发时间延迟约 300ms。
点击蒙层,蒙层消失后,下层元素点击触发。

为什么会产生 click 延时?

点击后300ms如果没有继续点击就是单击,如果有点击就是双击
Safari会有双击缩放,APP中单机都会产生300ms的延迟

为什么会产生 click 点击穿透?

双层元素叠加时,
在上层元素上绑定 touch事件,下层元素绑定click 事件。
由于click发生在touch之后,点击上层元素,元素消失,
下层元素会触发 click 事件,由此产生了点击穿透的效果。

解决方法

1. 使用 touchstart 替换 click -- > 导致点击穿透
   同时需要点击和滑动的情况不建议使用,因为会有冲突
   所以,在具有滚动的情况下,还是建议使用 click 处理
   或者保证点击的元素不在滚动的父元素之下
   
2. 使用fastclick库
   fastclick原理:
   在检测到touchend事件的时候,会通过DOM自定义事件立即出发模拟
   一个click事件,并把浏览器在300ms之后真正的click事件阻止掉

参考:mp.weixin.qq.com/s/CVwXr3jEf…