zepto的tap事件点透问题

为什么会有tap点透问题?

由于zepto实现tap的方式是,通过监听绑定在document的touch事件实现,而且tap事件冒泡到document时被触发。在点击完成时,touchstart、touchend之后,tap事件冒泡到document之前,click事件会被触发,由于click事件有300ms的延迟(safari的双击事件的设计),tap事件执行完成后,click还在延迟中,若tap事件作用的元素被隐藏,那么延迟的click就会作用到被隐藏元素下方的元素上,若该元素绑定了click事件,则会被触发。

解决方案

  1. 使用FastClick

    FastClick.attach(document.body);

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

  3. 延迟一定时间(300ms+)来处理事件

 

posted on 2017-03-20 15:31  zmiaozzz  阅读(388)  评论(0编辑  收藏  举报

导航