移动端的点透事件

果子爸聊技术 2019-05-05 15:25:24 ⋅ 575 阅读

https://www.cnblogs.com/yinhaiying/p/10796876.html

点透事件:是指两个元素其中一个元素具有默认的点击事件,当我们让不具有点击事件的元素隐藏起来,会触发另一个元素的点击事件,这种行为被称之为点透事件。

如下图所示:当我们给div元素添加touchstart事件让div元素隐藏起来,则a标签会发生跳转。相当于我们"点透"了div元素,从而触发了a标签的默认跳转行为,这就是所谓的点透事件。

分析这种点透事件的原因,我们需要了解移动端和PC端的事件的不同之处:

1、PC端所有的事件都能够在移动端被触发.也就是说索然移动端目前主要是touch事件,但是其他的事件也会被触发,只是没有相对应的事件处理函数,比如touchstart就触发了click事件。

2、PC端事件在移动端触发有300毫秒延迟,这是因为PC端的事件太多,可能同一个行为能够触发非常多的事件,浏览器需要通过这300毫秒内的行为,判断究竟触发的是哪个事件。比如点击一下,触发的事件可能有点击事件,鼠标按下事件,双击事件等。浏览器需要根据就下来你的操作来判断究竟属于哪个事件,如果接下来你不进行操作那么就是点击事件,如果你连续点击了,那么可能是双击事件。

3、移动端事件没有300毫秒延迟,因为移动端事件简单,只有touch几种事件,不存在相同的事件。

根据上面的事件机制我们来分析上面的代码:

首先我们点击div以后,触发了多个事件,包括click,doubleclick,mousedown,touchstart等事件,其中只有touchstart绑定了事件处理函数,其中touchstart是移动端事件没有延迟,因此div层马上消失,但是click事件有300ms的延迟,在这个地方会执行click的事件处理函数,由于a标签具有click的默认事件,因此会触发a标签的跳转,这就是所谓的'点透'。其实只不过是PC端事件在移动端有300ms延迟造成的。

点透事件的解决办法:取消元素的默认点击事件

点透事件造成的问题是本来不应该跳转的元素发生了跳转,因此我们需要阻止掉元素的默认跳转行为。但是如果我们阻止了元素的默认跳转行为,在其他地方需要进行跳转时就无法正常跳转了,因此我们需要设置新的跳转行为。

 

上面我们通过使用移动端的阻止默认事件的方法,阻止了所有的默认行为,也包括默认跳转。但是a标签在其他情况下,需要正常跳转,这时候我们需要重新定义a标签的跳转。通过出发touchend事件时,将其跳转到对应的href。但是通过touchend事件触发的点击事件可能存在问题,因为还有可能touchmove也会触发a标签的点击事件(误触)。

因此我们需要判断究竟是touchend触发了点击事件还是touchmove触发了点击事件。只有在touchend触发时,才实现跳转。

 

---------------END----------------

后续的内容同样精彩

长按关注“IT实战联盟”哦




全部评论: 0

    我有话说:

    「轻阅读」移动事件穿透原理与解决方案

    本文将带你了解事件穿透及如何在实际项目中选择合适方案解决事件穿透问题。

    「轻阅读」移动适配必须掌握基本概念和适配方案

    随着技术发展,移动设备越来越流行,并且不同设备间屏幕尺寸和屏幕像素差异,移动开发面临着多分辨率适配问题。

    Redisson 3.13.6 发布,官方推荐 Redis 客户

    Redisson 3.13.6 已发布,这是一个 Java 编写 Redis 客户,具备驻内存数据网格(In-Memory Data Grid)功能,并获得了 Redis 官方推荐

    京东技术:京东风格移动Vue组件库NutUI2.0来啦

    移动 Vue 组件库 NutUI 自发布以来受到了广泛关注。据不完全统计,目前至少有30多个京东 web 项目正在使用 NutUI 。

    滴滴开源基于 React 移动开发组件库-Pile.js

    Pile.js 是滴滴开发基于 React 移动开发组件库。 轻量,易用,包含 52 个交互功能,支持多语言与自定义皮肤。可以非常轻松创建用户交互界面,让前端开发更专注于业务逻辑实现。

    【开源资讯】WinSCP 5.17.8 发布,Windows 图形化 SFTP 客户

    WinSCP 是一个 Windows 环境下使用 SSH 开源图形化 SFTP 客户,同时支持 SCP 协议,它主要功能是在本地与

    「轻阅读」如何设计移动屏适配方案

    在众多移动设备中,前端开发人员如何在不同屏幕大小,不同程度高清屏下去百分百还原设计稿,从来都不

    Netty 4.1.61.Final 发布,异步事件驱动网络应用框架

    Netty 4.1.61.Final 已经发布。Netty 是一个异步事件驱动网络应用框架,主要用于可维护高性能协议服务器和客户快速开发。本次更新除了修复各种错误之外,还包含了一个安全修复

    Netty 4.1.65.Final 发布,异步事件驱动网络应用框架

    Netty 4.1.65.Final 已经发布。Netty 是一个异步事件驱动网络应用框架,主要用于可维护高性能协议服务器和客户快速开发。本次更新除了修复各种错误之外,还包含了一个安全修复

    Netty 4.1.59.Final 发布,异步事件驱动网络应用框架

    Netty 4.1.59.Final 已经发布。Netty 是一个异步事件驱动网络应用框架,主要用于可维护高性能协议服务器和客户快速开发。 该版本除了修复各种错误之外,还包含一个安全修复程序

    Netty 4.1.60.Final 发布,异步事件驱动网络应用框架

    Netty 4.1.60.Final 已经发布。Netty 是一个异步事件驱动网络应用框架,主要用于可维护高性能协议服务器和客户快速开发。本次更新除了修复各种错误之外,还包含了一个安全修复

    「开源-前端」vue全家桶制作一个精致仿美团项目

    一款集菜、用户评价和商家信息为一体移动端点餐APP

    欣赏一下人家写API接口,那叫一个优雅!

    作者:码不动链接:https://www.jianshu.com/p/fa75acba5b07 在移动互联网,分布式、微服务盛行今天,现在项目绝大部分都采用微服务框架,前后分离方式,(题外

    架构实战篇(十五):Spring Boot 解耦之事件驱动

    通过使用spring 事件来解决业务代码耦合

    世界之最烂开发项目:苦撑12年,600多万行代码…

    “ 你见过最烂项目,撑了多长时间才完蛋?六个月?一年?今天介绍这个奇葩项目,不但一开始就烂得,还硬...

    高并发下分布式事务解决方案-MQ消息事务+最终一致性

    分布式事务分布式事务就是指事务参与者、支持事务服务器、资源服务器以及事务管理器分别位于不同分布式系统不同节点之上

    「轻阅读」分布式事务四种解决方案,成长需要尝试

    分布式事务事务操作位于不同节点上,需要保证事务 AICD 特性。