zepto的tap事件点透问题分析:
1、“点透”是什么
你可能碰到过在列表页面上创建一个弹出层,弹出层有个关闭的按钮,你点了这个按钮关闭弹出层后后,这个按钮正下方的内容也会执行点击事件(或打开链接)。这个被定义为这是一个“点透”现象。
在前面的项目中遇到了如下图的问题:在点击弹出来的选择组件的右上角完成后会让完成后面的input输入框聚焦,弹出输入键盘,也就是点透了
2、为什么会出现点透呢?
这个需要从zepto(或者jqm)源码里面看关于tap的实现方法:
可以看出zepto的tap通过兼听绑定在document上的touch事件来完成tap事件的模拟的,及tap事件是冒泡到document上触发的
再点击完成时的tap事件(touchstart\touchend)需要冒泡到document上才会触发,而在冒泡到document之前,用户手的接触屏幕(touchstart)和离开屏幕(touchend)是会触发click事件的,因为click事件有延迟触发(这就是为什么移动端不用click而用tap的原因)(大概是300ms,为了实现safari的双击事件的设计),所以在执行完tap事件之后,弹出来的选择组件马上就隐藏了,此时click事件还在延迟的300ms之中,当300ms到来的时候,click到的其实不是完成而是隐藏之后的下方的元素,如果正下方的元素绑定的有click事件此时便会触发,如果没有绑定click事件的话就当没click,但是正下方的是input输入框(或者select选择框或者单选复选框),点击默认聚焦而弹出输入键盘,也就出现了上面的点透现象。
3、点透的解决方法:
方案一:来得很直接github上有个fastclick可以完美解决https://github.com/ftlabs/fastclick
引入fastclick.js,因为fastclick源码不依赖其他库所以你可以在原生的js前直接加上
window.addEventListener( "load", function() { FastClick.attach( document.body ); }, false );
当然require的话就这样:
1 var FastClick = require(‘fastclick‘); 2 FastClick.attach(document.body, options);
方案二:用touchend代替tap事件并阻止掉touchend的默认行为preventDefault()
1 $("#cbFinish").on("touchend", function (event) { 2 //很多处理比如隐藏什么的 3 event.preventDefault(); 4 });
方案三:延迟一定的时间(300ms+)来处理事件
1 $("#cbFinish").on("tap", function (event) { 2 setTimeout(function(){ 3 //很多处理比如隐藏什么的 4 },320); 5 });
这种方法其实很好,可以和fadeInIn/fadeOut等动画结合使用,可以做出过度效果
相关推荐
为了解决tap事件冒泡的问题,可以采取一种基于事件委托的策略。在zepto.js中,可以在document级别上绑定tap事件,然后根据触发事件的元素来判断是否需要阻止冒泡。如果点击的是特定元素(例如按钮),则不执行冒泡;...
zepto.js 这个可以用tap事件
touch库实现'swipe', 'swipeLeft', 'swipeRight', 'swipeUp', 'swipeDown', 'doubleTap', 'tap', 'singleTap', 'longTap'重要源代码(绑定在touchend事件上) 处理Touch事件能让你了解到用户的每一根手指的位置,...
在标题提到的"zepto包含touch模块",这意味着zepto.js集成了对触摸事件的支持,使得在触摸设备上开发交互式应用变得更加便捷。 触摸模块是zepto.js的一个重要组成部分,它允许开发者处理触摸设备上的各种手势,如...
它提供了`tap`事件,用于监听轻触(点击)行为,而`swipe`事件则用于检测滑动动作,这些都是移动设备常见的交互方式。这些触摸事件使得开发者可以轻松实现移动设备特有的手势交互。 4. **动画效果**:尽管体积小,...
本资源“zepto手机移动端弹出提示框图标动画特效”正是一款专注于这一领域的优秀解决方案。Zepto是一个轻量级的JavaScript库,专为移动端浏览器设计,它提供了与jQuery相似的API,但在移动端具有更快的性能。 首先...
9. **touch模块**: 专为触摸设备设计,提供了触摸事件的支持,如tap、swipe等,使得Zepto在移动设备上具有更好的兼容性和响应性。 这些模块共同构建了Zepto的功能集,使其能够满足现代Web开发中的各种需求。在Node....
让jquery validation plugin 支持zepto
标题提到的"Zepto集成touch版本"指的是 Zepto 的一个扩展,专门针对触摸事件和手势处理进行了优化,使其更适合在触屏设备如智能手机和平板电脑上使用。这个集成版本包含了更多的功能,比官方提供的基础7个组件更加...
### Zepto.js中文手册知识点详解 #### 一、概述 Zepto.js是一个轻量级的JavaScript库,旨在为移动Web开发提供与jQuery类似的API。它体积小、性能高且易于使用,非常适合移动设备上的Web应用开发。Zepto.js支持大...
这份"Zepto插件touch事件的源码解读共4页.pdf.zip"压缩文件似乎包含了对Zepto.js touch事件源码的详细解析,尽管文件列表中提及的"赚钱项目"与主题无关,我们仍将专注于探讨Zepto的touch事件。 首先,`touch`事件在...
zepto.js是一个轻量级的JavaScript库,专为移动设备的Web开发设计,尤其是在iOS和Android平台上。它模仿了jQuery的API,使得开发者在移动端也能享受类似jQuery的开发体验。Zepto的核心目标是保持小巧的体积,同时...
《 Mobiscroll 与 Zepto 的日期选择器集成详解》 在移动开发中,提供一个易用、高效的日期选择器是至关重要的。Mobiscroll 是一款知名的触摸优化的滚动库,特别适合在移动设备上创建日历、时钟和滑动选择器。而 ...
以上四种方法涵盖了使用库(Hammer.js和Zepto.js)以及原生JavaScript和CSS实现`tap`事件的方式。每种方法都有其适用场景,具体选择应根据项目需求和技术栈来决定。例如,如果项目已经依赖了Hammer.js或Zepto.js,...
在移动端,Zepto因其小体积、高性能和对触屏事件的良好支持而受到欢迎。 1. **轻量级与快速** Zepto的核心模块很小,通常只有40KB左右(gzipped),相比jQuery的体积要小得多,这使得它在移动设备上加载更快,减少...
【FastClick库与Tap事件】 在移动设备上,由于浏览器的300毫秒延迟,用户点击元素后,响应时间相对较慢,这被称为“300ms点击延迟”。为了解决这个问题,开发者通常会使用`tap`事件来代替传统的`click`事件,因为`...
同时,为了优化移动端性能,Zepto.js支持事件委托,允许用户在一个父元素上绑定事件,通过事件冒泡来处理子元素的事件。 动画效果是Zepto.js的另一个亮点,`.animate()`方法可以实现平滑的CSS属性动画,例如改变...
2. **事件处理**:Zepto支持绑定和解绑事件,如`.on()`和`.off()`,以及模拟事件冒泡的`.trigger()`方法。此外,还有事件委托机制,可以高效地处理大量动态生成的元素的事件。 3. **动画效果**:尽管体积小巧,但...
总的来说,Zepto手机库是一个强大且轻便的解决方案,对于构建响应式、高性能的移动Web应用具有很大的帮助。它的API设计友好,易于学习和使用,能够极大地提升开发效率。通过合理的使用和优化,开发者可以在满足需求...