聊聊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 ...
随机推荐
- jquery.imagezoom.js制作鼠标悬停图片放大镜特效、参数和最简教程
一.插件介绍 今天在用到放大镜效果的时候,突然发现网站里没有放大镜的插件.于是总结了一下,放到这里.为自己,也为他人提供方便.jquery.imagezoom.js这款插件用途很简单,就是鼠标移过去, ...
- springMVC修改用户请求内容
最近在做一个微信相关的网站,很多地方涉及到微信表情的输入,导致内容无法插入到数据库,虽然有用到一个表情过滤的工具类,但是需要过滤的地方比较多,于是想到在过滤器中过滤用户请求的内容. request这个 ...
- Java动态代理学习【Spring AOP基础之一】
Spring AOP使用的其中一个底层技术就是Java的动态代理技术.Java的动态代理技术主要围绕两个类进行的 java.lang.reflect.InvocationHandler java.la ...
- 从零入手微信小程序开发
前言: 哈哈,发现我写的随笔都是项目驱使的.当然,这篇也是项目驱使的咯,前段时间领导在玩微信时候发现了微信小程序的好处,流程,切换速度快等,然后就让小弟研究研究小程序的实现. 补充下,博客大多都是处理 ...
- 关于Spring总结
关于Spring总结 Spring引入 传统的基于mvc的项目框架结构:Entity / dao / service / action 简单用户访问流程:/user.action ----> T ...
- C#调用C++数据类型对照
类型对照: BSTR --------- StringBuilder LPCTSTR --------- StringBuilder LPCWSTR --------- IntPtr handle-- ...
- Shell Script编程——USB挂载/复制文件/查找文件/压缩文件
PS:$引用变量的时候不要加空格.用了case,while的结构. main文件 #!/bin/bash chmod a+x changedate chmod a+x changemod chmod ...
- 优化testng报告
背景 搞过testng的同学都知道,testng自带的报告非常丑,而且有些字段的展示很不人性化,所以需要优化下报告 解决方案 尝试过一下开源的jar包,如ReportNG,奈何和目前使用的allure ...
- 使用Visual Studio Code和typescript 开发调试React Native项目
关于React Native的详细介绍我就不叙述了,他是使用js构建原声app的开发框架.一次变异多平台运行,非常强大.但是个人不喜欢js的过于灵活(弱类型)的语法.强大的强类型语言Typescrip ...
- Firefox插件推荐
介绍一下我常用的几个Firefox插件,不一定适合所有人. 图中所示4个插件是我仅有的4个addons,除了stylish,其他几个已经伴随我多年. 1.Adblock Plus(强烈推荐) 广告拦截 ...