zepto的tap事件点透问题
为什么会有tap点透问题?
由于zepto实现tap的方式是,通过监听绑定在document的touch事件实现,而且tap事件冒泡到document时被触发。在点击完成时,touchstart、touchend之后,tap事件冒泡到document之前,click事件会被触发,由于click事件有300ms的延迟(safari的双击事件的设计),tap事件执行完成后,click还在延迟中,若tap事件作用的元素被隐藏,那么延迟的click就会作用到被隐藏元素下方的元素上,若该元素绑定了click事件,则会被触发。
解决方案
-
使用FastClick
FastClick.attach(document.body);
-
用touchend事件代替tap事件,并阻止touchend的默认行为(preventDefault())
-
延迟一定时间(300ms+)来处理事件