最近在做webapp开发,其中用到了zepto框架,在使用click的时候遇到了点击透传事件,问题如下:
事件描述:初始界面触发界面事件变化元素A相对应的位置上切换到目标界面的时候同样位置存在一个元素B绑定了事件处理,一定情况下A触发的时候B也会被触发,这种现象称之为穿透效应。
事件解决方式:
第一位置为touchstart/touchend事件,第二位置为touchstart/touchend事件,未透传
第一位置为touchstart/touchend事件,第二位置click事件,触发透传
第一位置为touchstart/touchend事件,第二位置Input元素,触发透传
第一位置为click事件,第二位置touchstart/touchend事件,未触发
第一位置为click事件,第二位置为click事件,未触发
结论:第一位置与第二位置使用相同类型的事件
第二位置为input元素时,第一位置使用click事件。
Ps:关于移动端的click与touch原理,帮助理解使用规则,具体触发顺序为:
Touchstart->touchmove->touchend->mousedown->mousemove->mouseenter->click
所以一旦当有click事件晚于touch,那么一定为触发透传效应。最好的是取消click,利用touchstart ,touchmove ,touchend一并模拟click事件。
attachment tips : Android 4.0以下不支持原生的webview滚动,启用原生滚动只需要给外层元素加上样式-webkit-overflow-scrolling : touch.