为什么要使用FastClick

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

项目地址:

ftlabs/fastclick​github.com

FastClick的使用

安装fastclick

安装fastclick可以使用npm,Component和Bower。另外也提供了Ruby版的gem fastclick-rails以及.NET提供了NuGet package。最直接的可以在页面引入fastclick js文件。如:

  • 在页面直接引入fastclick.js
 <script type='application/javascript' src='/path/to/fastclick.js'></script>

  • 使用npm安装
 npm install fastclick 

初始化FastClick实例

初始化FastClick实例建议在页面的DOM文档加载完成后。

  • 纯Javascript版
// 常规用法
if ('addEventListener' in document) {     document.addEventListener('DOMContentLoaded', function() {FastClick.attach(document.body);
}, false);
} // 针对ios 13 bug 可尝试采用
if ('addEventListener' in document && 'ontouchstart' in window) {FastClick.prototype.focus = function (targetElement) {targetElement.focus()}document.addEventListener('DOMContentLoaded', function () {FastClick.attach(document.body)}, false)
}

  • jQuery版
 $(function() {     FastClick.attach(document.body);
});

  • 类似Common JS的模块系统方式
 var attachFastClick = require('fastclick'); attachFastClick(document.body);

调用require('fastclick')会返回FastClick.attach函数。

使用needsclick过滤特定的元素

如果页面上有一些特定的元素不需要使用fastclick来立刻触发点击事件,可以在元素的class上添加needsclick:

 <a class="needsclick">Ignored by FastClick</a>

不需要使用fastclick的情况

以下这几种情况是不需要使用fastclick:

1、FastClick是不会对PC浏览器添加监听事件

2、Android版Chrome 32+浏览器,如果设置viewport meta的值为width=device-width,这种情况下浏览器会马上出发点击事件,不会延迟300毫秒。

 <meta name="viewport" content="width=device-width, initial-scale=1">

3、所有版本的Android Chrome浏览器,如果设置viewport meta的值有user-scalable=no,浏览器也是会马上出发点击事件。

4、IE11+浏览器设置了css的属性touch-action: manipulation,它会在某些标签(a,button等)禁止双击事件,IE10的为-ms-touch-action: manipulation

存在的问题

有一个问题,就是input的焦点很难获取,往往需要多次点击或者双击才能获取到焦点(大家可以去试试,真的很难点),最开始以为是获取焦点区域太小导致,后来发现是这个fastclick.js框架的问题。

解决方法:

SO,我们点开源码,找到这一段

/*** @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(); // 加入这一句话就OK了targetElement.setSelectionRange(length, length);} else {targetElement.focus();}};

点击延迟_解决移动端浏览器点击延迟300ms的问题——FastClick用法相关推荐

  1. chrome浏览器上传文件延迟_解决谷歌Chrome浏览器上传图片反应慢的办法

    谷歌chrome浏览器本来非常好用,但是可能有的人在更新版本或重装电脑后,用着用着突然发现上传图片或文件的时候居然直接卡死!只能强制关闭后用ie上传,为此笔者也一度很苦恼.笔者在网上搜索答案后,并没有 ...

  2. java键盘监听延迟_解决JAVA键盘监听的延迟现象以及八个方向的运动

    首先解释一下键盘出现延迟的原因: 其实键盘为了用户体验,在按下一次按键之后,会有片刻的延迟,为什么会这样呢? 你想一下,当你打一个字母时,连着出来了好几个字母,你心里面的感受是怎么样的? 所以嘛,键盘 ...

  3. 解决pc端浏览器不兼容的问题

    1.对于浏览器之间存在的默认样式差距 <link href="https://cdn.bootcss.com/normalize/7.0.0/normalize.min.css&quo ...

  4. java检测ping延迟_批量ping IP并检测IP延迟率和丢包率脚本

    脚本文件如下: #!/bin/bash #Author:Mr.Ding #Created Time:2018-08-26 07:23:44 #Name:ping.sh #Description: sh ...

  5. vue移动端点击事件延迟_解决Vue 界面在苹果手机上滑动点击事件等卡顿问题_莺语_前端开发者...

    用 (1).滑动页面卡顿, (2).点击事件响应缓慢,百度才发现在苹果手机上有300ms的延迟. 一.滑动页面卡顿 //页面布局 页面内容 在对应的组件的最外层div上加上这样的样式: .conten ...

  6. a:hover伪类在ios移动端浏览器内点击无效的解决方法

    安卓页面可以打开,苹果端hover上去打不开:hover的没有方法没有激活: a:hover 设置的样式在ios系统的浏览器内显示不出来,看来在iOS系统的移动设备中,需要在按钮元素或body/htm ...

  7. html手机不能自动播放音乐,解决移动端浏览器 HTML 音频不能自动播放的三种方法...

    由于Android,IOS移动端的浏览器以及微信自带的浏览器为了用户更好的体验,规定不自动播放音频视频,默认屏蔽了autoplay,如果要想达到自动播放效果,需要单独处理,方法有以下几种: 第一种:添 ...

  8. win10浏览器加载很慢_解决Win10 Edge浏览器打开网页慢的问题

    Win10 Edge浏览器打开网页特别慢该怎么办?Windows10默认已安装了Edge浏览器,在使用的过程中,有时候会感觉速度很慢,经常出现卡死的情况,它与之前的IE浏览器相比,很多时候速度也比较快 ...

  9. 解决火狐Firefox浏览器一点击地址栏就弹出下拉搜索建议菜单的问题

    在使用火狐浏览器的时候,总是会在点地址栏的时候,弹出搜索建议下拉菜单,遮挡了下方的页面,影响使用, 解决方法: 以后再点击地址栏就不会弹出冗长的 搜索建议下拉菜单了. march the 03rd 2 ...

最新文章

  1. 【JOURNAL】城邦组诗之十二 - 心肠
  2. 上证所Level-2在信息内容和传送方式方面的比较优势[逐笔数据与分笔数据的根本区别]...
  3. 【阿里云OSS】OSS概述
  4. SAP Commerce Impex语法
  5. 数据结构:将二叉搜索树转换成一个排序的双向链表
  6. 队友招募!60天一起搞定MySQL所有重点
  7. 自然数之和(leetcode 167)
  8. 2021-07-31mysql 登录退出
  9. 如何使ArcIMS图例显示中文
  10. php 图片相似度对比算法,PHP实现的简易版图片相似度比较
  11. LaTeX 修改中文摘要名字
  12. 小学计算机学什么,小学信息技术课学什么
  13. sony android mp3播放器,劲能小钢炮!Sony ZX505 播放器动耳听:云音乐也HiFi
  14. 智维专业工程师告诉你,哪款Kvaser多通道CAN总线分析仪性价比最高?
  15. R语言 数据抽样(数据失衡处理、sample随机抽样、数据等比抽样、交叉验证抽样)
  16. Intel SGX论文调研
  17. 零知识证明安全实现经验
  18. linux cuda安装目录,ubuntu16.04上的cuda安装、卸载以及替换
  19. VMware BitFusion 再探二(功能测试)
  20. Android bugreport工具分析和使用

热门文章

  1. 星特朗望远镜怎么样_入手曝光评测双筒望远镜星特朗和博冠有何区别?哪个好?体验报告揭秘...
  2. 华大 MCU 之一 HC32F460 替换 STM32F411 移植记录
  3. C/C++之数据类型
  4. IO-1(Java IO、File类)
  5. cadence原理图封装pin名称重复_Cadence原理图库文件引脚名重复处理方法介绍
  6. unity3d 绘制小地图_Unity中实现小地图的几种方式
  7. VS Code Pettier设置换行最大宽度
  8. 为什么selection.find在word vba中不返回所有结果?_工作表查询中,内连接Inner join的讲解...
  9. SpringCloud(1) 架构演进和基础知识简介
  10. WannaCry勒索比特币蠕虫病毒解决方案