聊聊click延迟和点击穿透
博客原文地址:Claiyre的个人博客 https://claiyre.github.io/
如需转载,请在文章开头注明原文地址
移动端click事件被延迟
移动端的开发经常需要监听用户的双击行为,所以在touchend事件之后会有300ms左右的延迟,用来判断是否有双击事件。
因为这种延迟,所以我们在移动端通常不监听click事件。
移动端的事件的发生顺序是这样的:touchstart---touchmove---touchend,然后大约过300ms触发click事件
tap事件
zepto这个库解决click延迟的思路是:自定义tap事件,当用户点击元素时,touchend事件会先于click发生,当touchend冒泡到document时触发目标元素的tap事件
所以我们可以通过监听tap事件代替监听click事件。
但需要注意的是,tap事件并不是
点击穿透
在我们常见的弹出层这种情况下,点击关闭弹出层时可能会发生穿透现象。
那为什么会出现点击穿透这种现象呢
因为当tap事件发生时,上层遮罩层关闭,此时事件只进行到了touchend,而click大约在300ms后才触发,当click触发时,上面的遮罩层已经消失,这就相当于点击了到了下层的元素
如果这个元素绑定了click事件,或者有默认的点击行为,比如a标签和input等等,那么就会触发他们的click行为。
这就是点击穿透事件。
如何解决点击穿透
1.直接将上层的tap事件换成click
代价就是有300ms的延迟,但毕竟这个按钮用户也就关闭时点一下,所以影响不大
2.在click事件发生前阻止它
具体做法是在touchend的事件处理函数中使用e.preventDefault()来阻止后续的click事件。
3.使用css3的一个新特性:pointer-events
pointer-events:none 可以彻底屏蔽鼠标事件,所以可以给点击按钮这个属性,然后就可以放心大胆地使用tap事件或者touchend啦
参考文章:
http://www.zhangxinxu.com/wordpress/2011/12/css3-pointer-events-none-javascript/
- https://segmentfault.com/a/1190000003848737
聊聊click延迟和点击穿透的更多相关文章
- 移动端的300ms延迟和点击穿透
移动端300ms延迟:假定这么一个场景.用户在 浏览器里边点击了一个链接.由于用户可以进行双击缩放或者双击滚动的操作,当用户一次点击屏幕之后,浏览器并不能立刻判断用户是确实要打开这个链接,还是想要进行 ...
- AlloyTouch Button插件-不再愁click延迟和点击态
移动端不能使用click,因为click会有300ms.所有有了fastclick这样的解决方案.然后fastclick并没有解决点击态(用户点击的瞬间要有及时的外观变化反馈)的问题.hover会有不 ...
- 移动开发之fastclick 点击穿透
穿透(点穿)是在mobile各种浏览器上发生的常见的bug.可能是由click事件的延迟(300ms)或者事件冒泡导致 现象:在A页面中有个 btn1<或a标签>,在B页面中有个 btn2 ...
- 点击穿透bug · Jaywii
微信点击穿透Bug 问题描述:在移动端为了去除点击延迟引入了fast-click,然而在房贷计算器的开发中遇到了这样一个bug,用户点击了select之后,微信在弹出选择器之后会瞬间因为约300ms的 ...
- JS click延迟解决方案
click延迟解决方案 移动端click事件会有300ms的延迟,原因是移动端屏幕双击会缩放页面 1.禁止缩放功能 浏览器禁用默认双击缩放行为去掉300ms的点击延迟 user-scalabl ...
- Click Magick – 下一代点击跟踪和链接管理
Click Magick 是新一代的广告跟踪和链接管理系统,让每一个点击都能给你带去更多的利润.它是专门设计来跟踪所有类型的点击计费广告,包括从谷歌,必应和 Facebook 的 PPC 广告,就好像 ...
- vue项目引入FastClick组件解决IOS系统下h5页面中的按钮点击延迟,连续点击无反应的问题
异常描述: ios系统手机中访问h5页面,按钮点击有延迟,连续点击卡顿.无反应. 异常原因: 这要追溯至 2007 年初.苹果公司在发布首款 iPhone 前夕,遇到一个问题:当时的网站都是为大屏幕设 ...
- jquery click()方法模拟点击事件对a标签不生效
if(e.keyCode == 13) { $items.eq(index).click(); return; } 搜索框下拉列表模拟点击时间,使用上述代码不能触发链接跳转 1,页面使用了bootst ...
- WPF的点击穿透
1.background 为{x:null} 或 鼠标点击会穿透,如果不想让一个透明的border点击穿透,设置透明色Transparent时就可以点到这个看起来透明的border 2.当依赖属性I ...
随机推荐
- annotation-config, annotation-driven, compont-scan 区别
<annotaion-driven/>标签: 这个标签对应的实现类是org.springframework.web.servlet.config.AnnotationDrivenBeanD ...
- C语言数组:C语言数组定义、二维数组、动态数组、字符串数组
1.C语言数组的概念 在<更加优美的C语言输出>一节中我们举了一个例子,是输出一个 4×4 的整数矩阵,代码如下: #include <stdio.h> #include &l ...
- Oracle 11g DG手工switchover切换标准化流程
Oracle 11g DG手工switchover切换标准化流程 环境:RHEL 6.5 + Oracle GI 11.2.0.4 + Oracle DB 11.2.0.4 Primary RAC(2 ...
- 使用struct模块从定宽数据文件导入数据
- $($('.className').html( )选择器的工作原理
$($('.slot')[0]).html('<img src = "' + images[slotOne-1] + '">');
- JSP是什么?
JSP [1] 简介 > HTML - HTML擅长显示一个静态的网页,但是不能调用Java程序. > Se ...
- postman参数为Json数据结构
本文主要postman字段为Json结构时的操作说明 本文以订单发货为例,根据接口文档去设计 用户下单接口字段如图: 有两种方式可以将字段Json数据传递: 下图为接口字段规则: 接口为post请求方 ...
- /etc/fstab最后3个字段详解
/etc/fstab文件的作用就是让挂载的信息在开启的时候生效: 磁盘分区 挂载目录 文件格式 访问方式 fs_dump fs_pass /dev/sdb1 /mnt ext4 defaults ...
- js中的访问器属性中的getter和setter函数实现数据双向绑定
嗯,之前在读js红宝书的时候,在对象那一章有介绍属性类型.第一种数据类型指的是数据属性,第二种是访问器属性.在初识vue的时候,其双向数据绑定也是基于访问器属性中的getter和setter函数原理来 ...
- 8.8.1 Super关键字
Super关键字 1.super不是引用类型,super中存储的不是内存地址,super指向的不是父类对象. 2.super代表的是当前子类对象中的父类型特征. //通过子类的构造方法去调用父类的构造 ...