天天看點

微信小程式catchtap逆反思維阻止捕獲事件發生

我們都是微信小程式中catchtap綁定的是阻止冒泡事件的發生,換句話說就是僅對目前元素本身生效。

常用場景:假如點選父級盒子觸發A事件,點選子元素觸發B事件,但是這樣實際的效果卻是,點選父級也會觸發子元素的事件,點選子元素也會發生父級的事件,bug就是:這兩個事件都會被觸發!!!這就是冒泡事件和捕獲事件同時存在了!

<view bindtap="A">
   <view bindtap="B"></view>
</view>      

單一的bindtap點選事件就無法解決問題了,官方就造了catchtap,給子元素的綁定事件改成:

<view bindtap="A">
   <view catchtap="B"></view>
</view>      

這樣點選父級僅觸發A事件,點選子元素就出發B事件了,捕獲冒泡bug就迎難而解了!

這是catchtap的常見的用法,我們把它應用到實際的案例中:

下圖是一個底部彈框樣式,父級盒子攜帶黑透背景,子元素攜帶彈框内容,要求點選黑透彈框消失,點選使用者前往使用者中心...等其他事件

我們先給父級彈框加一個bindtap事件,點選先關閉彈框,發現點選彈框也消失了,發生了我們開頭講的父級連帶子級的捕獲事件。

微信小程式catchtap逆反思維阻止捕獲事件發生
<view class="qui-boom" wx:if="{{openFlag}}" bindtap="closeUserModle">
   <view class="qui-boom-bottom login-modle" catchtap="stop">
......      
closeUserModle:function(){
        this.setData({
          openFlag:false
        })
},
stop:function(){ 
//阻止彈框冒泡和捕獲的空事件,不要删除!!!
}      

繼續閱讀