移动端,click 点击事件延时与穿透

问题

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

原因

为什么会产生 click 延时?

iOS 中的 safari,为了实现双击缩放操作,在单击 300ms 之后,如果未进行第二次点击,则执行 click 单击操作。也就是说来判断用户行为是否为双击产生的。但是,在 App 中,无论是否需要双击缩放这种行为,click 单击都会产生 300ms 延迟

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

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

解决方法

  • touchstart 替换 click
    事件触发顺序: touchstart, touchmove, touchend, click
    很容易想象,在我需要touchmove滑动时候,优先触发了touchstart的点击事件,是不是已经产生了冲突呢?
    所以呢,在具有滚动的情况下,还是建议使用 click 处理。
  • 使用 fastclick 库
    使用 npm/yarn 安装后使用
    import FastClick from ‘fastclick’;
    FastClick.attach(document.body, options);
    同样,使用fastclick库后,click 延时和穿透问题都没了
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值