- 事件是視圖層到邏輯層的通訊方式。
- 事件可以將使用者的行為反饋到邏輯層進行處理。
- 事件可以綁定在組件上,當達到觸發條件,就會執行邏輯層中對應的事件函數。
- 事件對象可以攜帶額外資訊,如 id、dataset、touches。
使用方式
若要在組件中綁定一個事件處理函數,如 onTap,則需要在該頁面的 .js 檔案中的 Page 裡定義onTap對應的事件處理函數。
<view id="tapTest" data-hi="Alipay" onTap="tapName">
<view id="tapTestInner" data-hi="AlipayInner">
Click me!
</view>
</view>
在相應的 Page 中定義相應的事件處理函數 tapName,參數為事件對象 event。
Page({
tapName(event) {
console.log(event);
},
});
控制台輸出 event 資訊如下所示:
{
"type": "tap",
"timeStamp": 1550561469952,
"target": {
"id": "tapTestInner",
"dataset": {
"hi": "Alipay"
},
"targetDataset": {
"hi": "AlipayInner"
}
},
"currentTarget": {
"id": "tapTest",
"dataset": {
"hi": "Alipay"
}
}
}
使用組件(基礎組件、向外延展群組件和自訂群組件)時,組件裡有哪些可用的事件取決於組件本身是否支援,支援的事件會在具體組件的文檔裡明確列出。
事件類型
事件分為冒泡事件和非冒泡事件:
- 冒泡事件:以關鍵字
on為首碼,當組件上的事件被觸發,該事件會向父節點傳遞。 - 非冒泡事件:以關鍵字
catch為首碼,當組件上的事件被觸發,該事件不會向父節點傳遞。
事件綁定的寫法同組件的屬性,以 key、value 的形式。
- key 以
on或catch開頭,然後跟上事件的類型,如onTap、catchTap。 - value 是一個字串,對應 Page 中定義的函數名,不存在時觸發事件會報錯。
<view id="outter" onTap="handleTap1">
view1
<view id="middle" catchTap="handleTap2">
view2
<view id="inner" onTap="handleTap3">
view3
</view>
</view>
</view>
上述代碼中,點擊 view3 會先後觸發 handleTap3 和 handleTap2(因為 tap 事件會冒泡到 view2,而 view2 阻止了 tap 事件冒泡,不再向父節點傳遞),點擊 view2 會觸發 handleTap2,點擊 view1 會觸發 handleTap1。
所有會發生冒泡的事件:
| 類型 | 觸發條件 |
|---|---|
| touchStart | 觸摸動作開始 |
| touchMove | 觸摸後移動 |
| touchEnd | 觸摸動作結束 |
| touchCancel | 觸摸動作被打斷,如來電提醒,彈窗 |
| tap | 觸摸後馬上離開 |
| longTap | 觸摸後,超過 500ms 再離開 |