300ms延迟产生原因
双击缩放,顾名思义,即用手指在屏幕上快速点击两次,iOS 自带的 Safari 浏览器会将网页缩放至原始比例。 那么这和 300 毫秒延迟有什么联系呢? 假定这么一个场景。用户在 iOS Safari 里边点击了一个链接。由于用户可以进行双击缩放或者双击滚动的操作,当用户一次点击屏幕之后,浏览器并不能立刻判断用户是确实要打开这个链接,还是想要进行双击操作。因此,iOS Safari 就等待 300 毫秒,以判断用户是否再次点击了屏幕。 鉴于iPhone的成功,其他移动浏览器都复制了 iPhone Safari 浏览器的多数约定,包括双击缩放,几乎现在所有的移动端浏览器都有这个功能。之前人们刚刚接触移动端的页面,在欣喜的时候往往不会在意这个300ms的延时问题,可是如今touch端界面如雨后春笋,用户对体验的要求也更高,这300ms带来的卡顿慢慢变得让人难以接受。
为什么要解决300ms延迟问题
至于为什么需要解决300ms延迟的问题,因为在人体对时间的感知效果中,大于等于300ms已经可以让人体有所感知,也就是说,300ms的延迟会给用户体验带来负面影响,所以在开发中,常常需要将此问题解决。
解决方案(以vue为例)
其一:应用fastclick库
(1)安装
npm install fastclick
(2)导入(ES6导入方法)
import FastClick from '(你安装的fastclick库相对路径)'
(3)应用attach
FastClick.attach(document.body);
其二:index.html中用mate标签解决(此标签的使用只能解决Android端延迟问题)
<meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no" />
其三:CSS属性解决
touch-action:none;
跟300ms点击延迟相关的,是touch-action这个CSS属性。这个属性指定了相应元素上能够触发的用户代理(也就是浏览器)的默认行为。如果将该属性值设置为touch-action: none,那么表示在该元素上的操作不会触发用户代理的任何默认行为,就无需进行300ms的延迟判断。
以上就是博主带来的300ms延迟的一些解决方法
|