知识 分享 互助 懒人建站

懒人建站专注于网页素材下载,提供网站模板、网页设计、ps素材、图片素材等,服务于【个人站长】【网页设计师】和【web开发从业者】的代码素材与设计素材网站。

懒人建站提供网页素材下载、网站模板
知识 分享 互助!

zeptojs的tap事件点透问题的解决方案

作者:佳明妈 来源:bubuko.com 2015-09-15 人气:2560
zeptojs的tap事件点透问题的解决方案三种,如下: 方案一:来得很直接github上有个fastclick可以完美解决tap事件点透,还有其他4中方案供选择

zeptojs的tap事件点透是因为tap事件是通过 touchstart 、touchmove 、 touchend 这三个事件来模拟实现的,在手机端事件机制中,触发touch事件后会紧接着触发touch事件坐标元素的click事件,
因为B元素在300ms内刚好“掉”回来A的位置,所以就触发了B的click事件,而且zepto的tap事件都是代理到body上的,所以想通过e.preventDefault()阻止默认行为也是行不通的

zeptojs的tap事件点透问题的解决方案三种,如下:

方案一:来得很直接github上有个fastclick可以完美解决https://github.com/ftlabs/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+)来处理tap事件

$("#cbFinish").on("tap", function (event) {
     setTimeout(function(){
     //很多处理比如隐藏什么的
     },320);
 });    
 
这种方法其实很好,可以和fadeInIn/fadeOut等动画结合使用,可以做出过度效果,但是有一个缺点就是有320ms延时,如果是为了去掉click的300ms延时而用了tap的话,这里又加个320ms延时,还不如直接用click事件。

方案四:a链接改为span等标签,使用js跳转页面(不考虑SEO-推荐)

适用于部分场景,如果触发tap事件的层下面层中没有其他click事件注册,只是有a链接,因为click事件会让a链接跳转,这个时候如果出现点透,下层的a链接就会在上层tap后触发跳转
所以我们就可以把a链接换成span等非a链接标签,然后所有的点击动作事件一律使用tap事件,就避免了这个链接跳转的问题
如果你的webapp不考虑SEO优化的问题,其实这个方案反而是最好的。
↓ 查看全文

zeptojs的tap事件点透问题的解决方案由懒人建站收集整理,您可以自由传播,请主动带上本文链接

懒人建站就是免费分享,觉得有用就多来支持一下,没有能帮到您,懒人也只能表示遗憾,希望有一天能帮到您。

试玩游戏,也能赚钱

1块钱也能提现

→立即行动

zeptojs的tap事件点透问题的解决方案-最新评论