移动端-点透问题巧妙解决(代码片段)

jlfw jlfw     2023-03-20     476

关键词:

移动端经常出现点透,至于怎么出现的请大家去看一下zepto实现tap的源码。

1、“点透”是什么

你可能碰到过在列表页面上创建一个弹出层,弹出层有个关闭的按钮,你点了这个按钮关闭弹出层后后,这个按钮正下方的内容也会执行点击事件(或打开链接)。这个被定义为这是一个“点透”现象。

2.为什么会出现点透

zepto的tap通过兼听绑定在document上的touch事件来完成tap事件的模拟的,及tap事件是冒泡到document上触发的

再点击完成时的tap事件(touchstarttouchend)需要冒泡到document上才会触发,而在冒泡到document之前,用户手的接触屏幕(touchstart)和离开屏幕(touchend)是会触发click事件的,因为click事件有延迟触发(这就是为什么移动端不用click而用tap的原因)(大概是300ms,为了实现safari的双击事件的设计),
所以在执行完tap事件之后,弹出来的选择组件马上就隐藏了,此时click事件还在延迟的300ms之中,当300ms到来的时候,click到的其实不是完成而是隐藏之后的下方的元素,如果正下方的元素绑定的有click事件此时便会触发,如果没有绑定click事件的话就当没click,但是正下方的是input输入框(或者select选择框或者单选复选框),点击默认聚焦而弹出输入键盘,也就出现了上面的点透现象

3.点透的解决方法:

方案一:来得很直接github上有个fastclick可以完美解决

引入fastclick.js,因为fastclick源码不依赖其他库所以你可以在原生的js前直接加上

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

或者有zepto或者jqm的js里面加上

 $(function() 
    FastClick.attach(document.body);
 );

当然require的话就这样:

 var FastClick = require(‘fastclick‘);
 FastClick.attach(document.body, options);

方案二:用touchend代替tap事件并阻止掉touchend的默认行为preventDefault()

 $("#cbFinish").on("touchend", function (event) 
   //很多处理比如隐藏什么的
    event.preventDefault();
 );

方案三:延迟一定的时间(300ms+)来处理事件

 $("#cbFinish").on("tap", function (event) 
    setTimeout(function()
    //很多处理比如隐藏什么的
    ,320);
 ); 

这种方法其实很好,可以和fadeInIn/fadeOut等动画结合使用,可以做出过度效果

理论上上面的方法可以完美的解决tap的点透问题,如果真的倔强到不行,用click

移动端-点透的解决方法(代码片段)

移动端经常出现点透,至于怎么出现的请大家去看一下zepto实现tap的源码。1、“点透”是什么你可能碰到过在列表页面上创建一个弹出层,弹出层有个关闭的按钮,你点了这个按钮关闭弹出层后后,这个按钮正下方的内容也会执... 查看详情

移动端app列表点透事件处理方法(代码片段)

...搜一搜,或者看小火柴的这篇文章。这里是自己在做移动端时,在列表滑动的时候,遇到的点透问题。出现这个问题的来由是因为在转场的时候,各个手机的转场效果不一样,有的比较好,但是在有些低端... 查看详情

移动端--touch事件与点透问题

 也来说说touch事件与点击穿透问题:http://blog.csdn.net/alex8046/article/details/52299785 查看详情

移动端app列表点透事件处理方法(代码片段)

...搜一搜,或者看小火柴的这篇文章。这里是自己在做移动端时,在列表滑动的时候,遇到的点透问题。出现这个问题的来由是因为在转场的时候,各个手机的转场效果不一样,有的比较好,但是在有些低端... 查看详情

移动端touchclicktap的区别(代码片段)

...二、使用tap会出现点透事件(事件穿透)很多用过Zepto(移动端开发的库)都说使用tap会出现点透事件。1、什么是tap事件穿透执行完上层绑定的tap事件后,下层如果绑 查看详情

mobile_点透_传透(代码片段)

...ent="width=device-width,initial-scale=1.0,user-scalable=no"/>PC事件在移动端,会有300ms的延迟。点透现象:(面试题)轻轻触碰box,box消失当点击非文字覆盖区域时,盒子正常消失。当点击文字区域时,页面发生跳转。 理想情况:无论... 查看详情

移动端“点透事件”

参考链接:http://www.uedsc.com/through-the-click-point-in-the-development-of-web.html刚才举例说明了什么是点透,其实点透的出现场景可以总结如下:A/B两个层上下z轴重叠。上层的A点击后消失或移开。(这一点很重要)B元素本身有默认click事... 查看详情

移动端:开发技巧(代码片段)

...meta标签,这些meta标签在开发webapp时起到非常重要的作用移动端H5开发所遇到的问题与细节,以及ios兼容 https://blog.csdn.net/dwb123456123456/article/details/82663563HTML5标签的使用开发移动端页面时,建议前端工程师使用HTML5,HTML5可以实... 查看详情

移动端的touchclick事件的理解+点透(代码片段)

移动端在touch上一共有4个事件touchstarttouchmovetouchendtouchcancel,touchcancel,一般来说,它们执行的顺序为touchstart->touchmove->touchend->touchcancel.其中touchcancel一般情况下不会触发,也不是这里讨论的焦点;这里会结合click对上面的事... 查看详情

移动端一些小问题

一.点击穿透:原因:1.touch事件300ms后,触发click事件;2.混用touch和click会导致点透问题。解决思路:1.不要混用touch和click;2.阻止掉touch之后的click。解决方案:1.tap后延迟350ms再隐藏mask;2.pointer-events:mask隐藏后,给按钮下面元... 查看详情

移动端布局(如何解决边框问题)(代码片段)

1.产生这个问题的原因。     在移动端中,1px和pc端中是不一样的。这是因为window.devicePixelRatio是设备上物理像素和设备独立像素(device-independent pixels(dips))的比例问题导致的。2.解决方案:   1).用box-shado... 查看详情

移动端如何解决页面返回上次浏览位置问题(代码片段)

functionpushHistory()varstate=;state=//title:"itGrade",自定义参数:自定义参数;console.log(state);window.history.pushState(state,null,"#");//在需要监听的页面执行该方法自动监听页面返回操作window.addEventListener("popstate",functio 查看详情

解决手机(移动端)点击事件失效问题(代码片段)

...oll;当超过之后,可以滚动查看,但是如果这样的话,在移动端 查看详情

移动端的点透事件

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

如何解决移动端300ms延迟问题(代码片段)

方案一: <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport" />注释掉vue中public文件夹里面的meta标签方案二:在style中添加*  touc 查看详情

移动端高清适配方案(解决图片模糊问题1px细线问题)(代码片段)

  本文介绍了移动端适配的3种方法,以及移动端图片模糊问题和1px细线问题的解决方法。当然了,在这之前先整理了与这些方法相关的知识:物理像素、设备独立像素、设备像素比和viewport。>>>>物理像素、设备独立... 查看详情

zepto的点透问题如何解决?

...会触发click事件的,因为click事件有延迟触发(这就是为什么移动端不用click而用tap的原因)(大概是300ms,为了实现safari的双击事件的设计),所以在执行完tap事件之后,弹出来的选择组件马上就隐藏了,此时click事件还在延迟的300ms之中... 查看详情

stylus移动端边框1像素问题解决方案(代码片段)

借鉴前端移动框架yo1border($border-width=1px,$border-color=#ccc,$border-style=solid,$radius=null)2//为边框位置提供定位参考3position:relative;4if$border-width==null5$border-width:0;67border-radius:$radius;8&::after 查看详情