注冊(cè)

微信小程序解綁事件,微信小程序解除綁定

2020-09-27
導(dǎo)讀:什么是事件 事件是視圖層到邏輯層的通訊方式。 事件可以將用戶的行為反饋到邏輯層進(jìn)行處理。 事件可以綁定在組件上,當(dāng)達(dá)到觸發(fā)事件,就會(huì)執(zhí)行邏輯層中對(duì)應(yīng)的事件處理函數(shù)。...

什么是事件


  • 事件是視圖層到邏輯層的通訊方式。
  • 事件可以將用戶的行為反饋到邏輯層進(jìn)行處理。
  • 事件可以綁定在組件上,當(dāng)達(dá)到觸發(fā)事件,就會(huì)執(zhí)行邏輯層中對(duì)應(yīng)的事件處理函數(shù)。
  • 事件對(duì)象可以攜帶額外信息,如id, dataset, touches。
  • 微信小程序解綁事件,微信小程序解除綁定

事件的使用方式


  • 在組件中綁定一個(gè)事件處理函數(shù)。

bindtap,當(dāng)用戶點(diǎn)擊該組件的時(shí)候會(huì)在該頁(yè)面對(duì)應(yīng)的Page中找到相應(yīng)的事件處理函數(shù)。

<view id="tapTest" data-hi="WeChat" bindtap="tapName"> Click me! </view>
  • 在相應(yīng)的Page定義中寫上相應(yīng)的事件處理函數(shù),參數(shù)是event。
Page({
  tapName: function(event) {
    console.log(event)
  }
})
  • 可以看到log出來(lái)的信息大致如下
    {
    "type": "tap",
    "timeStamp":895,
    "target": {
      "id": "tapTest",
      "dataset": {
       "hi": "WeChat"
      }
    },
    "currentTarget": {
      "id": "tapTest",
      "dataset": {
        "hi": "WeChat"
      }
    },
    "detail": {
      "x":53,
      "y":14
    },
    "touches": [{
      "identifier":0,
      "pageX":53,
      "pageY":14,
      "clientX":53,
      "clientY":14,
    }],
    "changedTouches": [{
      "identifier":0,
      "pageX":53,
      "pageY":14,
      "clientX":53,
      "clientY":14,
    }],
    }

事件詳解

事件分類

事件分為冒泡事件和非冒泡事件

  1. 冒泡事件:當(dāng)一個(gè)組件上的事件被觸發(fā)后,該事件會(huì)向父節(jié)點(diǎn)傳遞。
  2. 非冒泡事件:當(dāng)一個(gè)組件上的事件被觸發(fā)后,該事件不會(huì)向父節(jié)點(diǎn)傳遞。

WXML的冒泡事件列表:

類型 觸發(fā)條件
touchstart 手指觸摸動(dòng)作開始
touchmove 手指觸摸后移動(dòng)
touchcancel 手指觸摸動(dòng)作被打斷,如來(lái)電提醒,彈窗
touchend 手指觸摸動(dòng)作結(jié)束
tap 手指觸摸后馬上離開
longtap 手指觸摸后,超過(guò)350ms再離開

注:除上表之外的其他組件自定義事件都是非冒泡事件,如<form/>submit事件,<input/>input事件,<scroll-view/>scroll事件,(詳見各個(gè)組件)

事件綁定


事件綁定的寫法同組件的屬性,以key、value的形式。

  • key以bindcatch開頭,然后跟上事件的類型,如bindtap, catchtouchstart
  • value是一個(gè)字符串,需要在對(duì)應(yīng)的Page中定義同名的函數(shù)。不然當(dāng)觸發(fā)事件的時(shí)候會(huì)報(bào)錯(cuò)。

bind事件綁定不會(huì)阻止冒泡事件向上冒泡,catch事件綁定可以阻止冒泡事件向上冒泡。

如在下邊這個(gè)例子中,點(diǎn)擊inner view會(huì)先后觸發(fā)handleTap3handleTap2(因?yàn)閠ap事件會(huì)冒泡到middle view,而middle view阻止了tap事件冒泡,不再向父節(jié)點(diǎn)傳遞),點(diǎn)擊middle view會(huì)觸發(fā)handleTap2,點(diǎn)擊outter view會(huì)觸發(fā)handleTap1。

<view id="outter" bindtap="handleTap1">
  outer view
  <view id="middle" catchtap="handleTap2">
    middle view
    <view id="inner" bindtap="handleTap3">
      inner view
    </view>
  </view>
</view>

事件對(duì)象


如無(wú)特殊說(shuō)明,當(dāng)組件觸發(fā)事件時(shí),邏輯層綁定該事件的處理函數(shù)會(huì)收到一個(gè)事件對(duì)象。

BaseEvent基礎(chǔ)事件對(duì)象屬性列表:

屬性 類型 說(shuō)明
type String 事件類型
timeStamp Integer 事件生成時(shí)的時(shí)間戳
target Object 觸發(fā)事件的組件的一些屬性值集合
currentTarget Object 當(dāng)前組件的一些屬性值集合

CustomEvent 自定義事件對(duì)象屬性列表(繼承 BaseEvent):

屬性 類型 說(shuō)明
detail Object 額外的信息

TouchEvent 觸摸事件對(duì)象屬性列表(繼承 BaseEvent):

屬性 類型 說(shuō)明
touches Array 觸摸事件,當(dāng)前停留在屏幕中的觸摸點(diǎn)信息的數(shù)組
changedTouches Array 觸摸事件,當(dāng)前變化的觸摸點(diǎn)信息的數(shù)組

特殊事件:<canvas/>中的觸摸事件不可冒泡,所以沒(méi)有 currentTarget。

type

通用事件類型

timeStamp

該頁(yè)面打開到觸發(fā)事件所經(jīng)過(guò)的毫秒數(shù)。

target

觸發(fā)事件的源組件。

屬性 類型 說(shuō)明
id String 事件源組件的id
tagName String 當(dāng)前組件的類型
dataset Object 事件源組件上由data-開頭的自定義屬性組成的集合

currentTarget

事件綁定的當(dāng)前組件。

屬性 類型 說(shuō)明
id String 當(dāng)前組件的id
tagName String 當(dāng)前組件的類型
dataset Object 當(dāng)前組件上由data-開頭的自定義屬性組成的集合

說(shuō)明: target 和 currentTarget 可以參考上例中,點(diǎn)擊 inner view 時(shí),handleTap3 收到的事件對(duì)象 target 和 currentTarget 都是 inner,而 handleTap2 收到的事件對(duì)象 target 就是 inner,currentTarget 就是 middle。

 

dataset

在組件中可以定義數(shù)據(jù),這些數(shù)據(jù)將會(huì)通過(guò)事件傳遞給 SERVICE。書寫方式:以data-開頭,多個(gè)單詞由連字符-鏈接,不能有大寫(大寫會(huì)自動(dòng)轉(zhuǎn)成小寫)如data-element-type,最終在 event.target.dataset 中會(huì)將連字符轉(zhuǎn)成駝峰elementType。

示例:

<view data-alpha-beta="1" data-alphaBeta="2" bindtap="bindViewTap"> DataSet Test </view>
Page({
  bindViewTap:function(event){
    event.target.dataset.alphaBeta === 1 // - 會(huì)轉(zhuǎn)為駝峰寫法
    event.target.dataset.alphabeta === 2 // 大寫會(huì)轉(zhuǎn)為小寫
  }
})

touches

touches 是一個(gè)數(shù)組,每個(gè)元素為一個(gè) Touch 對(duì)象(canvas 觸摸事件中攜帶的 touches 是 CanvasTouch 數(shù)組)。 表示當(dāng)前停留在屏幕上的觸摸點(diǎn)。

Touch 對(duì)象

屬性 類型 說(shuō)明
identifier Number 觸摸點(diǎn)的標(biāo)識(shí)符
pageX, pageY Number 距離文檔左上角的距離,文檔的左上角為原點(diǎn) ,橫向?yàn)閄軸,縱向?yàn)閅軸
clientX, clientY Number 距離頁(yè)面可顯示區(qū)域(屏幕除去導(dǎo)航條)左上角距離,橫向?yàn)閄軸,縱向?yàn)閅軸

CanvasTouch 對(duì)象

屬性 類型 說(shuō)明 特殊說(shuō)明
identifier Number 觸摸點(diǎn)的標(biāo)識(shí)符  
x, y Number 距離 Canvas 左上角的距離,Canvas 的左上角為原點(diǎn) ,橫向?yàn)閄軸,縱向?yàn)閅軸  

changedTouches

changedTouches 數(shù)據(jù)格式同 touches。表示有變化的觸摸點(diǎn),如從無(wú)變有(touchstart),位置變化(touchmove),從有變無(wú)(touchend、touchcancel)。

detail

自定義事件所攜帶的數(shù)據(jù),如表單組件的提交事件會(huì)攜帶用戶的輸入,媒體的錯(cuò)誤事件會(huì)攜帶錯(cuò)誤信息,詳見組件定義中各個(gè)事件的定義。

點(diǎn)擊事件的detail 帶有的 x, y 同 pageX, pageY 代表距離文檔左上角的距離。

 

更多微信小程序開發(fā)教程,可以關(guān)注hi小程序。
重磅推薦:小程序開店目錄

第一部分:小商店是什么

第二部分:如何開通一個(gè)小商店

第三部分:如何登錄小商店

第四部分:開店任務(wù)常見問(wèn)題

第五部分:小商店可以賣什么

第六部分:HiShop小程序特色功能

第七部分:小程序直播

第八部分:小程序收貨/物流

第九部分:小程序怎么結(jié)算

第十部分:小程序客服

第十一部分:電商創(chuàng)業(yè)

第十二部分:小程序游戲開發(fā)