移动端 click 事件、touch 事件、tap 事件的区别

简介: 移动端 click 事件、touch 事件、tap 事件的区别

1.click 事件在移动端会有 200-300ms 的延迟,主要原因是苹果手机在设计时,考虑到用户在浏览网页时需要放大,所以,在用户点击的 200-300ms 之后,才触发 click,如果 200-300ms 之内还有 click,就会进行放大缩小。


2.touch 事件是针对触屏手机上的触摸事件。现今大多数触屏手机 webkit 内核提供了 touch 事件的监听,让开发者可以获取用户触摸屏幕时的一些信息。其中包括:touchstart, touchmove, touchend, touchcancel 这四个事件,touchstart touchmove touchend 事件可以类比于 mousedown mouseover mouseup 的触发


3.tap 事件在移动端,代替 click 作为点击事件,tap 事件被很多框架(如 zepto)封装,来减少这延迟问题, tap 事件不是原生的,所以是封装的,那么具体是如何实现的呢?

<script>
  function tap(ele, callback) {
      // 记录开始时间
      var startTime = 0,
          // 控制允许延迟的时间
          delayTime = 200,
          // 记录是否移动,如果移动,则不触发tap事件
          isMove = false;
 
      // 在touchstart时记录开始的时间
      ele.addEventListener('touchstart', function(e) {
          startTime = Date.now();
      });
 
      // 如果touchmove事件被触发,则isMove为true
      ele.addEventListener('touchmove', function(e) {
          isMove = true;
      });
 
      // 如果touchmove事件触发或者中间时间超过了延迟时间,则返回,否则,调用回调函数。
      ele.addEventListener('touchend', function(e) {
          if (isMove || (Date.now() - startTime > delayTime)) {
              return;
          } else {
              callback(e);
          }
      })
  }
 
  var btn = document.getElementById('btn');
  tap(btn, function() {
      alert('taped');
  }); 
</script>


如果我们在移动端所有的 click 都替换为了 tap 事件,还是会触发点透问题的,因为实质是: 在同一个 z 轴上,z-index 不同的两个元素,上面的元素是一个绑定了 tap 事件的,下面是一个 a 标签,一旦 tap 触发,这个元素就会 display: none,而从上面的 tap 可以看出,有 touchstart、touchend,所以会 300ms 之后触发 click 事件,而 z-index 已经消失了,所以,触发了下面的 a 的 click 事件,注意: 我们认为 a 标签默认是绑定了 click 事件的。而这种现象不是我们所期待的。


解决方案: (1)使用 fastclick。 (2)添加一个延迟。

(1)直接引入 fastclick 库

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

(2)对于上一个 tap 做延迟。

tap(ele, function() {
    setTimeout(function() {
        ele.style.display = "none";
    }, 300);
})


这样,过了 300ms,那么 click 事件就不会触发在下面的 a 标签上了。

相关文章
|
数据可视化 Swift 开发者
零一万物开源Yi系列“理科状元”Yi-9B,消费级显卡可跑,魔搭社区最佳实践
零一万物发布并开源了Yi系列中的“理科状元”——Yi-9B,可在魔搭体验
|
数据采集 监控 搜索推荐
电商关键词研究:数据收集挑战与解决方案
关键词研究的重要性 深入的研究可以为卖家提供以下信息: 竞争对手数据; 内容营销的点子; 消费趋势; 客户的需求。
|
开发框架 移动开发 JavaScript
uniapp优缺点
UniApp 是一个跨平台的应用开发框架,基于 Vue.js 和 Webpack,可以将代码编译成多个平台的应用,如小程序、H5、App 等。
Vue3】vite打包报错:块的大小超过限制,Some chunks are larger than 500kb after minification
Vue3】vite打包报错:块的大小超过限制,Some chunks are larger than 500kb after minification
3133 0
移动端click事件、touch事件、tap事件的区别
移动端click事件、touch事件、tap事件的区别
440 0
|
8月前
|
JSON JavaScript 数据格式
jqtimeline.js-简单又好用的jquery时间轴插件
jqtimeline.js-简单又好用的jquery时间轴插件
|
11月前
|
存储 人工智能 自然语言处理
ChatMCP:基于 MCP 协议开发的 AI 聊天客户端,支持多语言和自动化安装 MCP 服务器
ChatMCP 是一款基于模型上下文协议(MCP)的 AI 聊天客户端,支持多语言和自动化安装。它能够与多种大型语言模型(LLM)如 OpenAI、Claude 和 OLLama 等进行交互,具备自动化安装 MCP 服务器、SSE 传输支持、自动选择服务器、聊天记录管理等功能。
2538 16
ChatMCP:基于 MCP 协议开发的 AI 聊天客户端,支持多语言和自动化安装 MCP 服务器
|
11月前
|
关系型数据库 MySQL 数据库
mysql查看用户的过期时间
通过本文的介绍,希望您能够深入理解和掌握在MySQL中查看用户过期时间的方法,并在实际项目中灵活运用这些技术,提升数据库管理的安全性和效率。
756 3
|
11月前
|
安全 搜索推荐 测试技术
陪玩系统安全问题 陪玩系统用户体验 陪玩系统功能 陪玩搜索功能优化 陪玩系统开发教程
陪玩系统的安全问题至关重要,涉及用户数据保护、支付安全和平台稳定性。关键措施包括多因子认证、支付接口加密、防止恶意脚本注入、DDoS攻击防护及数据加密。同时,优化用户体验也非常重要,如简化操作流程、提供互动功能和个性化服务。核心功能涵盖用户注册、陪玩师资料展示、智能匹配、实时通讯、支付结算等。开发时需综合考虑需求分析、技术选型、界面设计和功能实现,并进行充分测试与优化,确保系统稳定性和安全性。
632 0
|
关系型数据库 MySQL Linux
Linux 下安装mysql 出现libncurses.so.5 is needed by MySQL-client-5.6.22-1.el6.i686解决办法
输入命令 : yum install libncurses.so.5。原因是因为缺少 : libncurses.so.5。
2058 0