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

homehtml homehtml     2023-03-20     224

关键词:

移动端经常出现点透,至于怎么出现的请大家去看一下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

移动端“点透事件”

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

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

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

移动端事件点透问题

在移动WEB开发中,有时候可能会出现点透问题,本随笔将围绕这个TAP点透问题,详细的讲述以下几点:  到底什么是点透?为什么会出现点透?如何避免出现点透?如果不可避免的出现了,如何解决解决点透问题?(我说的是... 查看详情

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

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

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

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

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

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

移动端web开发,click,touch,tap事件浅析

...双次点击。二、关于tap的点透处理在使用zepto框架的tap来移动设备浏览器内的点击事件,来规避click事件的延迟响应时,有可能出现点透的情况,即点击会触发非当前层的点击事件。处理方式 查看详情

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

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

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

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

zepto之tap事件点透问题分析及解决方案

点透现象出现的场景:  当A/B两个层上下z轴重叠,上层的A点击后消失或移开(这一点很重要),并且B元素本身有默认click事件(如a标签)或绑定了click事件。在这种情况下,点击A/B重叠的部分,就会出现点透的现象。点透现象... 查看详情

移动端300毫秒事件响应延迟解决方法[fastclick](代码片段)

vue-cli[2.x]中:安装npminstallfastclick--save使用:在main.js中:先importfastClickfrom‘fastclick‘然后fastClick.attach(document.body)importVuefrom‘vue‘importAppfrom‘./App‘importrouterfrom‘./router‘importfastClickfrom‘fastclick‘import‘./assets/styles/reset.css‘import... 查看详情

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

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

移动端的点透事件

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

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

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

input:fileonchange事件无法读取解决方法(代码片段)

最近做项目,移动端的多文件上传,使用input:file读取文件<inputtype=‘file‘name=‘file‘multipleaccept=‘image/*‘capture=‘camera‘>但是在移动端设置multiple属性是不起作用的,设置此属性PC端可以多选而移动端无法多选。我使用的解... 查看详情

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

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

『移动端』4种方法解决设置padding时宽高比实际预算的大的问题(代码片段)

使用CSS的box-sizing属性MDNdocs关于box-sizing一种解决方法是使用CSS的box-sizing属性来控制元素的盒模型。默认情况下,盒模型是"content-box",这意味着元素的宽度和高度只包括其内容,而不包括padding和border。将box-sizing设置为"border-box"... 查看详情

jqueryuidraggable兼容移动端(代码片段)

...便地在PC端实现页面元素的可拖放,不过jQyeryUI不是为移动端而写的,因此这个draggable方法在手机上无效。解决方案:已经有了现成的解决方法,那就是再加一个jQueryUITouchPunch插件即可。下载(https://github.com/fur... 查看详情