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

简介: 在开发webApp和移动端的时候,常常遇到移动端点击响应慢的问题,因此查找各方资料,整理解决方案加以记录

前言

在开发webApp和移动端的时候,常常遇到移动端点击响应慢的问题,因此查找各方资料,整理解决方案加以记录

  1. 移动端click事件存在300ms延迟

    为什么?
    由于浏览器双击缩放机制的设定,点击一次无法判断是否需要打开某一链接,因此需要等待300ms.

    解决:使用fastclick
    1、安装

    npm install fastclick

    2、 不同使用方式
    全局html

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

    2.1、vue
    main.js全局域

    import fastClick from 'fastclick';
    fastClick.attach(document.body);

    2.2、jquery

    <script type="text/javascript" src='https://cdn.bootcdn.net/ajax/libs/fastclick/1.0.6/fastclick.js'></script>
    $(function() {
        FastClick.attach(document.body);
    });

    2.3、js

    if ('addEventListener' in document) {
        document.addEventListener('DOMContentLoaded', function() {
            FastClick.attach(document.body);
        }, false);
    }
  2. 点击穿透
    既然click点击有300ms的延迟,那对于触摸屏,我们直接监听touchstart事件不就好了吗?

使用touchstart去代替click事件有两个不好的地方。
第一:touchstart是手指触摸屏幕就触发,有时候用户只是想滑动屏幕,却触发了touchstart事件,这不是我们想要的结果;
第二:使用touchstart事件在某些场景下可能会出现点击穿透的现象。

什么是点击穿透?
假如页面上有两个元素A和B。B元素在A元素之上。我们在B元素的touchstart事件上注册了一个回调函数,该回调函数的作用是隐藏B元素。我们发现,当我们点击B元素,B元素被隐藏了,随后,A元素触发了click事件。

这是因为在移动端浏览器,事件执行的顺序是touchstart > touchend >
click。而click事件有300ms的延迟,当touchstart事件把B元素隐藏之后,隔了300ms,浏览器触发了click事件,但是此时B元素不见了,所以该事件被派发到了A元素身上。如果A元素是一个链接,那此时页面就会意外地跳转。






相关文章
|
机器学习/深度学习 监控
数据漂移、概念漂移以及如何监控它们(mona)
在机器学习模型监控的上下文中经常提到数据和概念漂移,但它们到底是什么以及如何检测到它们?此外,考虑到围绕它们的常见误解,是不惜一切代价避免数据和概念漂移的事情,还是在生产中训练模型的自然和可接受的后果?请仔细阅读,找出答案。在本文中,我们将提供模型漂移的细粒度细分,以及检测它们的方法以及处理它们时的最佳实践。
|
Python
【金融量化】通道突破策略之布林带策略(Bollinger Band )、肯特纳通道策略(Keltner Channel)、唐奇安通道策略(Donchian)原理简介
本文介绍了三种金融量化分析中的通道突破策略:布林带策略(Bollinger Band)、肯特纳通道策略(Keltner Channel)和唐奇安通道策略(Donchian Channel),并提供了每种策略的原理和Python实现代码。
1082 2
|
10月前
|
人工智能 数据可视化 IDE
AI编程:cursor使用教程
这是小卷对AI编程工具学习的首篇文章,以Cursor为例,介绍其安装与基本功能。Cursor分为狭义和广义两类,前者辅助程序员高效编程,后者让无基础用户也能创建应用。文章详细讲解了Cursor的安装、快捷键、代码生成、修改、补全及项目理解等功能,并展示了如何通过提示词实现需求,帮助小白轻松上手编程。
2182 77
|
11月前
|
安全 Docker 容器
docker的默认网络模式有哪些
Docker 默认网络模式包括:1) bridge:默认模式,各容器分配独立IP,可通过名称或IP通信;2) host:容器与宿主机共享网络命名空间,性能最优但有安全风险;3) none:容器隔离无网络配置,适用于仅需本地通信的场景。
500 6
|
前端开发 JavaScript 容器
文字溢出隐藏及鼠标悬停显示效果
文字溢出隐藏及鼠标悬停显示效果
446 0
|
存储 数据可视化 JavaScript
echart:地图的制造&数据可视化
本文档介绍了如何使用 ECharts 和 Vue.js 制作中国地图,并展示了具体的数据绑定和样式设置方法。首先通过 Axios 获取地图数据并注册到 ECharts,然后设置地图的视觉映射、数据系列等配置项,实现地图的动态显示与交互。此外,还提供了关于时间显示、边框修饰、自定义字体及图表栏的样式调整等实用技巧。
823 1
|
监控 安全 网络安全
Windows系统安全深度解析:挑战、策略与全面防护
对敏感数据进行加密是保护数据机密性的重要手段。使用强加密算法对敏感数据进行加密存储和传输,即使数据被窃取也无法被轻易解密。此外,还可以考虑使用全磁盘加密技术来保护整个系统的数据安全性。
|
前端开发 JavaScript 容器
使用echarts遇到的问题及解决
使用echarts遇到的问题及解决
858 0
|
iOS开发 MacOS
解决CocoaPods安装卡住反应慢或失败
解决CocoaPods安装卡住反应慢或失败
2902 4
|
JSON Linux 数据格式
Pathlib好用吗?对比os.path
`pathlib`是Python 3.4引入的模块,提供了一种面向对象的方式来处理文件路径,以替代可能引起混淆的`os.path`字符串操作。从3.6版开始,`open()`及`os`, `shutil`, `os.path`中的函数都支持`pathlib.Path`对象。`pathlib`通过统一使用正斜杠处理不同操作系统路径,简化了代码,如在Windows和Linux上。它还允许直接对文件进行读写操作,减少错误和提高可读性。虽然`pathlib`可能稍慢于传统方法,但在大多数情况下,其易用性和可维护性优点远胜过这点性能损失。因此,推荐使用`pathlib`进行路径操作。
390 0