声明一下:300ms只是行业内部的统称,其实应该在300ms-350ms之间的一个数值。

移动端300ms延迟的前世今生

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

这当中最出名的,当属双击缩放(double tap to zoom)。顾名思义,即用手指在屏幕上快速点击两次,iOS自带的Safari浏览器会将网页缩放至原始比例。如下图所示:

这是一个很好的设计啊!那它和延迟有什么关系呢?
我们假定一个场景。当用户看到一张图片,而此时图标又刚好是一个链接地址。用户点击到图片之后,并不能立即判断用户是要打开链接,还是说想观看图片的细节。因此Safari 就等待300毫秒,判断用户是否再次点击了屏幕。这也是会有上述 300 毫秒延迟的主要原因。

由于iPhone的这一成功,许多浏览器厂商开始支持这一功能。但是随着技术的发展,性能的提升。慢慢的出现了混合,web应用在某些场景一开始逐渐替代了原生开发。此时所有的单击事件都有300毫秒延迟,必然是不可接受的,那怎么去解决这个问题呢?

方法一、禁用缩放

既然大家都觉得缩放没有意义,那就提供一个属性去控制它。在HTML文档头部添加如下meta标签

<meta name="viewport" content="user-scalable=no">
<meta name="viewport" content="initial-scale=1,maximum-scale=1">

有一个小小的缺点需要说一下,由于图片和文字都是一比一的比例显示的,而且禁用了缩放功能。在某些情况下,需要放大某张图片或者某段文字,就是无法实现图片的双击放大了。(除非js脚本)

方法二、更改默认的视口宽度

还是在HTML文档头部添加如下meta标签

<meta name="viewport" content="width=device-width">

这个方法跟方法一有些许不一样,他将页面的宽度设置成了,与显示屏同宽。需要网站做响应式布局。否则显示效果极易受到影响。还有他没有禁止缩放功能,所以,你可以用双指操作来放大页面。

方法三、CSS touch-action

html {touch-action: none
}

这是个CSS属性,如果值为 none 的话, 就表示禁用掉该元素上的浏览器代理的任何默认行为(缩放,移动, 拖拽),无300ms延迟。你也可以在html标签上面设置该属性,虽然该方法实现了禁用缩放。但是其他的触摸类型交互事件都被禁用了。导致页面无法滚动。

方法四、FastClick.js

熟悉移动端开发的同学,相信都见过这个轻量级库文件。我们引入库文件之后,添加如下代码就可以了。

window.addEventListener( "load", function() {FastClick.attach( document.body );
}, false );

那FastClick的原理是什么呢?
其实就是FastClick在检测到touchend事件之后,会通过 DOM 自定义事件立即触发一个模拟 click 事件,并把浏览器在 300 毫秒之后真正触发的 click 事件阻止掉。

方法五、指针事件的polyfill

现在除了IE,其他大部分浏览器都还不支持指针事件。有一些JS库,可以让我们提前使用指针事件,比如

  • Google的Polymer
  • 微软的handjs
  • Points

总结: 以上这五种方式基本支持日常的开发需求了,我个人比较推荐使用方法一加方法二,因为我目前所遇到的页面都对移动端做了专门的适应。

其实,关于移动端300ms的延迟问题,还引来一个比较经典的前面面试问题「击穿」,我们下篇讲解!

如何解决移动端300ms延迟的问题相关推荐

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

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

  2. 移动端300ms延迟解决的几种方法;

    方案一:禁用缩放 当HTML文档头部包含如下meta标签时: <meta name="viewport" content="user-scalable=no&quo ...

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

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

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

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

  5. vue-cli、脚手架创建、eslint、alias别名配置、proxy代理配置、axios、scoped、穿透、媒体查询、12栅格、动态rem、1px边框、移动端事件、300ms延迟问题(六)

    vue-cli的使用 现在使用前端工程化开发项目是主流的趋势,也就是说,我们需要使用一些工具来搭建vue的开发环境.一般情况下我们都会选择使用webpack进行项目的构建,在这里我们直接使用vue官方 ...

  6. 移动端click延迟和tap事件

    一.click等事件在移动端的延迟 click事件在移动端和pc端均可以触发,但是在移动端有延迟现象. 1.背景 由于早期移动设备浏览网页时内容较小,为了增强用户体验,苹果公司专门为移动设备设计了双击 ...

  7. web api、获取DOM元素的方式、事件理解、click事件在移动端300ms延时、事件对象、事件委托、常见事件类型

    web api: API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力 ...

  8. vue移动端点击事件延迟_去除点击事件300ms延迟 (使用了vue之后)

    因为习惯用vue了,再回到以前 采用获取dom节点来操作的写法 就觉得很麻烦. 我在 click 事件里面加了 tapmode 属性,在安卓里面没有300ms的延迟,但是在ios里面就会有这个问题. ...

  9. html百度转到顶部 fixed,科技常识:完美解决安卓端百度浏览器屏蔽fixed悬浮元素的问题...

    今天小编跟大家讲解下有关完美解决安卓端百度浏览器屏蔽fixed悬浮元素的问题 ,相信小伙伴们对这个话题应该有所关注吧,小编也收集到了有关完美解决安卓端百度浏览器屏蔽fixed悬浮元素的问题 的相关资料 ...

  10. 解决移动端音频自动播放问题

    解决移动端音频自动播放问题 参考文章: (1)解决移动端音频自动播放问题 (2)https://www.cnblogs.com/lcf1314/p/5867010.html 备忘一下.

最新文章

  1. JFrame 简单使用
  2. 清华镜像站 python_使用清华、豆瓣镜像源下载tensorflow
  3. ROS学习笔记一:安装配置ROS环境
  4. Oracle 无备份情况下的恢复--密码文件/参数文件
  5. 配置LANMP环境(1)-- 安装虚拟机VMware与安装CentOS7.2系统
  6. 101/103/104规约应用典型问题例举
  7. matlab函数sinh,matlab sinh 使用方法
  8. CAD无法打印的问题解决办法
  9. 【业余无线电BI1FKP】宝峰UV9R-Plus写频、自制写频线
  10. 计算机网络基本功能与拓扑结构,计算机网络第一章练习题
  11. 山海经异兽录服务器找不到了,山海经异兽录上古区
  12. 阿里云安装图片服务器
  13. 石油大学计算机课程,2018年石油高校计算机类课程MOOC共建研讨会在我校召开
  14. CM311-1a YST(2G+16G)刷Armbian后的网络设置
  15. zookeeper实现动态感知服务器上下线
  16. 操作系统——并发之锁
  17. 一文带你了解软件测试的价值,以后别再说软测天天在划水啦
  18. 编译错误:找不到工程或库
  19. 纯css更改图片颜色的技巧
  20. android qq很多压缩包,微信QQ总是占用手机大量内存?这次腾讯推出官方版清理工具了...

热门文章

  1. 常用性能工具:工欲善其事,必先利其器
  2. Ubuntu查询MAC地址,硬盘个数和类型,序列号,CPU数量,命令行查询网卡速率
  3. 分享一篇前端大佬关于前端职业规划的建议
  4. sparksql-分组月度环比同比自动化
  5. Android:Content has been consumed
  6. WordPress缩略图出现A TimThumb error has occured解决办法
  7. poj-2115 C Looooops 扩展欧几里德算法求最小非负整数解
  8. 第46讲 Android Camera2 API AWB自动白平衡
  9. 什么是FBO (Frame Buffer Object)
  10. 服务器修改host的ip,主机IP地址设置