zepto之tap点透处理

原创
2015/08/26 14:53
阅读数 2.7K

现象原因

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选择框或 者单选复选框),点击默认聚焦而弹出输入键盘,也就出现了上面的点透现象。

解决办法:

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

设置点击事件为_tap

_tap = touchend in document ? "touchend":"click"

这样在执行的过程中就可以直接调用div.on(_tap, function(){})

展开阅读全文
打赏
0
0 收藏
分享
加载中
leona_lily博主

引用来自“i5ting”的评论

去看一下fastclick,更好的理解这个问题

ok 3Q
2015/08/26 17:56
回复
举报
去看一下fastclick,更好的理解这个问题
2015/08/26 15:35
回复
举报
更多评论
打赏
2 评论
0 收藏
0
分享
返回顶部
顶部