移动端 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 标签上了。

相关文章
Vue3】vite打包报错:块的大小超过限制,Some chunks are larger than 500kb after minification
Vue3】vite打包报错:块的大小超过限制,Some chunks are larger than 500kb after minification
3655 0
移动端click事件、touch事件、tap事件的区别
移动端click事件、touch事件、tap事件的区别
709 0
|
10月前
|
人工智能 自然语言处理 监控
通义AI搜索排名优化全攻略
武汉得知网络AI搜索优化基于内容质量、用户意图匹配与交互数据,通过语义深度、页面体验及权威链接提升排名,结合技术性能与多模态策略,助力企业精准抢占AI搜索流量高地。
1258 4
|
Docker 容器
docker compose logs 常用指令
`docker compose logs`命令用于查看容器的输出日志。该命令提供多种选项,如以纯文本形式输出(`--no-color`)、隐藏日志前缀(`--no-log-prefix`)、显示时间戳(`-t, --timestamps`)等。用户可以指定时间范围(如`--since &quot;2024-08-06T13:11:10&quot;`和`--until &quot;2024-08-06T13:11:15&quot;`)或最近几分钟内的日志(如`--since 5m`)。使用`-f, --follow`可实时跟踪日志输出。注意:参数-h已废弃,应使用--help。
2027 57
移动端click事件、touch事件、tap事件的区别
移动端click事件、touch事件、tap事件的区别
1089 0
|
前端开发 iOS开发
通过css内修改input框placeholder样式
通过css内修改input框placeholder样式
585 1
|
编解码 缓存 前端开发
【专栏:HTML与CSS移动端开发篇】移动端网页布局与适配
【4月更文挑战第30天】本文探讨了如何使用HTML和CSS优化移动端网页布局与适配,强调响应式设计、灵活布局和媒体查询的重要性。针对移动设备的屏幕尺寸、操作方式、网络速度和性能差异,提出了断点选择、触摸优化、图像和性能优化等最佳实践。测试和调试、框架工具的应用也是关键步骤,以确保在多设备上提供优秀用户体验。开发者需持续学习新趋势和工具,以适应移动端发展。
913 2
|
Cloud Native 关系型数据库 分布式数据库
数据库性能诊断工具DBdoctor通过阿里云PolarDB产品生态集成认证
DBdoctor(V3.1.0)成功通过阿里云PolarDB分布式版(V2.3)集成认证,展现优秀兼容性和稳定性。此工具是聚好看科技的内核级数据库性能诊断产品,运用eBPF技术诊断SQL执行,提供智能巡检、根因分析和优化建议。最新版V3.1.1增加了对PolarDB-X和OceanBase的支持,以及基于cost的索引诊断功能。PolarDB-X是阿里巴巴的高性能云原生分布式数据库,兼容MySQL生态。用户可通过提供的下载地址、在线试用链接和部署指南体验DBdoctor。
1116 0
|
Web App开发 移动开发 Android开发
解决IOS Safari浏览器H5页面上下滑动时卡顿、页面缺失的问题
解决IOS Safari浏览器H5页面上下滑动时卡顿、页面缺失的问题

热门文章

最新文章