为什么移动端点击事件要加300ms延迟呢?

早在 2007 年初,苹果公司在发布首款 iPhone 前夕,遇到一个问题:当时的网站都是为大屏幕设备所设计的。于是苹果的工程师们做了一些约定,应对 iPhone 这种小屏幕浏览桌面端站点的问题。

这当中最出名的,当属双击缩放(double tap to zoom),这也是会有上述 300 毫秒延迟的主要原因。

双击缩放,顾名思义,即用手指在屏幕上快速点击两次,iOS 自带的 Safari 浏览器会将网页缩放至原始比例。 那么这和 300 毫秒延迟有什么联系呢?

假定这么一个场景: 用户在 iOS Safari 里边点击了一个链接。由于用户可以进行双击缩放或者双击滚动的操作,当用户一次点击屏幕之后,浏览器并不能立刻判断用户是确实要打开这个链接,还是想要进行双击操作。因此,iOS Safari 就等待 300 毫秒,以判断用户是否再次点击了屏幕。 鉴于iPhone的成功,其他移动浏览器都复制了 iPhone Safari 浏览器的多数约定,包括双击缩放,几乎现在所有的移动端浏览器都有这个功能。那时人们刚刚接触移动端的页面,不会在意这个300ms的延时问题,可是如今移动端如雨后春笋,用户对体验的要求也更高,这300ms带来的卡顿慢慢变得让人难以接受。

那么如何解决300ms延迟问题呢?

我们就推荐一种最有效、最方便的解决方案,大家应该都用过这个方法,那就是FastClick.js。

FastClick 是 FT Labs 专门为解决移动端浏览器 300 毫秒点击延迟问题所开发的一个轻量级的库。FastClick的实现原理是在检测到touchend事件的时候,会通过DOM自定义事件立即出发模拟一个click事件,并把浏览器在300ms之后的click事件阻止掉。

如何使用FastClick

npm install fastclick -S

如何你是vue项目可以在main.js里面直接引入,当然这样是全局的,如果你需要某个页面用到,那就单个页面引入。

//引入
import fastClick from 'fastclick'
//初始化FastClick实例。在页面的DOM文档加载完成后
fastClick.attach(document.body)

如果你用过FastClick在移动端,就会发现有一个体验很不好的问题,某些ios上,点击输入框想唤启软键盘,触点不是很灵敏,必须重压或长按才能成功唤启,快速点击是不会唤启软键盘的。

如何解决ios input框唤启软键盘不灵敏问题?

/*** @param {EventTarget|Element} targetElement*/
FastClick.prototype.focus = function(targetElement) {var length;// Issue #160: on iOS 7, some input elements (e.g. date datetime month) throw a vague TypeError on setSelectionRange. These elements don't have an integer value for the selectionStart and selectionEnd properties, but unfortunately that can't be used for detection because accessing the properties also throws a TypeError. Just check the type instead. Filed as Apple bug #15122724.if (deviceIsIOS && targetElement.setSelectionRange && targetElement.type.indexOf('date') !== 0 && targetElement.type !== 'time' && targetElement.type !== 'month' && targetElement.type !== 'email') {length = targetElement.value.length;targetElement.focus();// 加入这一句话targetElement.setSelectionRange(length, length);} else {targetElement.focus();}
};

你可以直接去node_module里找到fastClick文件修改focus方法,但是不建议这样做。如果以后npm install,就会被覆盖。

建议你在引用fastclick的地方,重写focus方法。如vue项目,你可以在main.js文件里面,引入fastclick模块后,重写focus方法。

作者:向建峰_Javan

链接:http://www.imooc.com/articl/287957

来源:慕课网

本文原创发布于慕课网 ,转载请注明出处,谢谢合作

click事件在什么时候出发_如何解决移动端Click事件300ms延迟的问题?相关推荐

  1. click事件在什么时候出发_什么是移动端?

    主要内容什么是移动端.移动端视口.rem em px区别.移动端适配.移动端布局和马蜂窝案例. 结合视频学习效果更佳: https://www.bjsxt.com/down/9319.html​www ...

  2. click事件在什么时候出发_超全的js事件机制amp;事件委托

    超全的js事件机制&事件委托,想要理解js事件只需认真看完此篇即可~ 目录结构: 什么是事件机制 事件冒泡事件捕获 DOM事件流事件委托 误区 在同一个对象上注册事件,并不一定按照注册顺序执行 ...

  3. click事件在什么时候出发_剖析setTimeout和click点击事件的触发顺序

    下面是一段非常简单的JavaScript代码 dianji setTimeout(function () { alert('timer handler') }, 2000) function test ...

  4. click事件在什么时候出发_关于JS 事件冒泡和onclick,click,on()事件触发顺序

    今天在给JQgrid中的标签添加click事件的时候,发现一个问题. JQgrid的table中,点击任何位置,都会勾选点击行的checkbox,而我希望在点击我的标签的时候,不要勾选checkbox ...

  5. fastclick 解决移动端click事件300ms延迟

    移动端click 事件延迟300ms 一般情况下,如果没有经过特殊处理,移动端浏览器在派发点击事件的时候,通常会出现300ms左右的延迟.也就是说,当我们点击页面的时候移动端浏览器并不是立即作出反应, ...

  6. fastclick 解决移动端click事件延迟300ms和点击穿透问题

    一.移动端click点击事件300ms延迟介绍 在正常情况下,如果不进行特殊处理,移动端在触发点击事件时,会有300ms的延迟.换句话说,当我们在点击移动端页面后不会立即做出反应,而是会等待300ms ...

  7. 移动端300ms延迟_如何解决移动端300ms延迟的问题

    声明一下:300ms只是行业内部的统称,其实应该在300ms-350ms之间的一个数值. 移动端300ms延迟的前世今生 背景: 2007 年初.苹果公司在发布首款iPhone前夕,遇到一个问题:当时 ...

  8. 解决移动端touch事件与click冲突的问题

    最简单的办法,就只绑定一个事件不就行了: 第二种,我觉得和第一种也没啥区别.. const Button = document.getElementById("targetButton&qu ...

  9. vue.js 使用 fastclick解决移动端click事件300毫秒延迟方法

    一般情况下一些框架就自动解决了这个问题 一.使用npm安装: npm install fastclick -S 二.用法: 安装完以后,可以在在main.js中全局引入,并绑定到body,全局生效.或 ...

  10. 点击延迟_解决移动端浏览器点击延迟300ms的问题——FastClick用法

    为什么要使用FastClick 移动设备上的浏览器默认会在用户点击屏幕大约延迟300毫秒后才会触发点击事件,这是为了检查用户是否在做双击.为了能够立即响应用户的点击事件,才有了FastClick. 项 ...

最新文章

  1. 企业新站上线应注意的几个问题
  2. python怎么把数据写入txt-如何将python中文件写入TXT
  3. SQL Server 入门复习(2008)图解
  4. 百度feeds联盟软件测试开发,UI 自动化测试用例整理举例-百度首页
  5. Spark常见问题解决办法
  6. python画彩虹爱心_用python画一颗彩虹色爱心送给女朋友!!!
  7. html跨浏览器兼容性问题
  8. go语言 echo框架_如何在Go Echo Web框架中设置嵌套HTML模板
  9. Java 数据库连接池的技术选型都应考虑哪些要素
  10. 【经验分享】为什么后台取到的时间和前台差8个小时?
  11. 浅谈TCP/IP网络编程中socket的行为
  12. c语言判断素数(c语言判断素数)
  13. 日记侠:如何提高朋友圈活跃度,给你5种实用方法
  14. matlab程序阻尼牛顿法,matlab阻尼牛顿法
  15. 三千弱水,总有一瓢知我冷暖
  16. cocos2d-x项目101次相遇:使用触摸事件移动 精灵
  17. 防汛抗洪中,北峰应急通信小系统如何筑起通信防线
  18. pap.er for mac高清壁纸下载后的储存位置在哪里?小编告诉你!!
  19. 基于PP-TSM+BMN+LSTM实现足球精彩时刻剪辑_副本1
  20. h5 bootstrap 小程序模板_汉中餐饮行业支付宝小程序模板

热门文章

  1. python二进制处理详述
  2. 补办毕业、学历证明流程
  3. 会赚钱的教师才是好教师
  4. SpringBoot常见面试题总结一
  5. MyBatis中Mapper接口是怎么和XML文件关联起来的
  6. 携程基于云的软呼叫中心及客服平台架构实践\n
  7. Apax Partners收购ThoughtWorks幕后探秘
  8. FTP、TFTP、NFS、SSH介绍及在 Ubuntu 上的安装配置
  9. CentOS yum 一次性安装所需要的依赖库。
  10. 使用Axure创建iPhone应用程序原型(二)