麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 課堂 > 小程序 > 正文

微信小程序視圖控件與bindtap之間的問題的解決

2020-03-21 16:00:09
字體:
來源:轉載
供稿:網友

微信小程序中 最常用的<view>控件 可以用bindtap(冒泡反應) 如<view bindtap="ItemOnclick" data-mType="123">的形式綁定ItemOnclick事件并傳遞一個dataset,其包含一個名為mType的元素 值為123。

在某一次設計中 

有如下結構:

  <view class="func-m" bindtap="ItemOnclick" data-mType="123">    <image src="{{ROOT_PATH}}/images/icon1.png" />  </view>

ItemOnclick事件在點擊在圖片上時不會觸發 需要點擊在圖片之外及外層view范圍之內的地方 才會觸發

若將bindtap寫在<image>標簽內 則反過來 點擊圖片會觸發 但點擊在圖片之外及外層view范圍之內的地方不會觸發

由此我做出判斷 

點擊事件不會向父級或子級控件傳遞。 

(然而這與冒泡反應的定義是不一致的)

但是最近又碰到下面這種情況:

<view style="background-color:#eee;" bindtap="HideMenuList"><!--此為最外層view-->  <image src="{{ROOT_PATH}}/images/icon1.png" bindtap="ShowMenuList" />  <view class="menu-list">     <view class="menu-item" data-mType="CP" bindtap="MenuItemOnclick">     </view>     <view class="menu-item" data-mType="HW" bindtap="MenuItemOnclick">     </view>   </view></view>

需要實現 點擊圖片 顯示菜單列表 點擊每個菜單項 觸發MenuItemOnclick事件并傳遞對應的參數 

然后當在<view class="menu-list">標簽外的地方點擊一下 就觸發HideMenuList事件隱藏菜單

而實際產生的效果是 當點擊圖片時 菜單列表一閃便消失 有時直接沒顯示 
后通過打印log發現是當點擊圖片觸發了ShowMenuList事件后 HideMenuList事件也被觸發了(且總在ShowMenuList事件之后)

即點擊事件由<image>傳遞到了外層的<view> 因而觸發了HideMenuList事件

這樣的話那之前的判斷就是錯誤的

目前還沒找到這兩種情況之間的關鍵差異,第二種情況的解決方案是 當顯示菜單時 同時創造一個透明遮罩層覆蓋除菜單列表外的區域,點擊到這個透明遮罩層后觸發HideMenuList事件并銷毀或隱藏遮罩層

PS:第二種情況的方式 以前在html及Android環境下都有用過 是沒有這個問題的,可能微信小程序這方面的底層機制和html及Android不一樣,還待深究。

微信小程序bindtap與catchtap的區別詳解

參考官方文檔 https://developers.weixin.qq.com/miniprogram/dev/framework/view/wxml/event.html

bindtap和catchtap都是當用戶點擊該組件的時候會在該頁面對應的Page中找到相應的事件處理函數。

bind事件綁定不會阻止冒泡事件向上冒泡,catch事件綁定可以阻止冒泡事件向上冒泡:

//視圖層<view id="outer" bindtap="handleTap1">   //在組件中綁定bindtap事件 函數handleTap1 outer view <view id="middle" catchtap="handleTap2"> //在組件中綁定catchtap事件 函數handleTap2  middle view  <view id="inner" bindtap="handleTap3"> //在組件中綁定bindtap事件 函數handleTap3   inner view  </view> </view></view>
//邏輯層Page({  handleTap1:function(event){    //點擊handleTap1輸出 outer view bindtap     console.log("outer view bindtap")   },  handleTap2: function (event) {   //點擊handleTap2輸出 middle view catchtap   console.log("middle view catchtap")   },  handleTap3: function (event) {   //點擊handleTap3輸出 inner view bindtap middle view catchtap    console.log("inner view bindtap")   }, 

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 国产精品99久久久久久大便 | 日韩精品久久久 | 久久夜夜视频 | 久草在线观看福利视频 | 成人免费一区二区三区 | 国产毛片毛片毛片 | 4p嗯啊巨肉寝室调教男男视频 | h视频免费在线 | 国产精品自在线拍 | 午夜在线观看视频网站 | 久久人体 | 国产成人精品免费视频大全最热 | 福利在线免费 | 久草视频在线资源 | 欧美男女爱爱视频 | 午夜视频观看 | 欧美性生活网站 | 91精品视频在线看 | 91在线精品亚洲一区二区 | 性大片1000免费看 | 久久99网 | 欧美一级高清免费 | 成人一级在线 | 水多视频在线观看 | 中文字幕亚洲一区二区三区 | 羞羞电影在线观看www | 黄色高清免费 | 美女视频黄视大全视频免费网址 | 92精品国产自产在线 | 一级电影在线免费观看 | 久久新网址 | 久久久久久麻豆 | 色婷婷久久一区二区 | 调教小男生抽打尿孔嗯啊视频 | 日日摸夜夜添夜夜添牛牛 | 久久嗨 | 欧美a级在线免费观看 | 亚洲第五色综合网 | 一区二区三区国产视频 | 91精品最新国内在线播放 | 亚洲一区二区三区在线免费观看 |