微信小程式:事件繫結
小程式中繫結事件,通過bind關鍵字來實現。如bindinput,bindtap(繫結點選事件),bindchange等。
什麼是事件
- 事件是檢視層到邏輯層的通訊方式。
- 事件可以將使用者的行為反饋到邏輯層進行處理。
- 事件可以繫結在元件上,當達到觸發事件,就會執行邏輯層中對應的事件處理函式。
- 事件物件可以攜帶額外資訊,如 id, dataset, touches
事件的使用方式
1、在元件中繫結一個事件處理函式。
如bindtap
,當用戶點選該元件的時候會在該頁面對應的Page中找到相應的事件處理函式。
<view id="tapTest" data-hi="Weixin" bindtap="tapName"> Click me! </view>
2、在相應的Page定義中寫上相應的事件處理函式,引數是event。
Page({ tapName: function(event) { console.log(event) } })
可以看到log出來的資訊大致如下:注意view標籤的id屬性值為e.currentTarget.id,自定義屬性hi值為:e.currentTarget.dataset.hi,
{ "type":"tap", "timeStamp":895, "target": { "id": "tapTest", "dataset": { "hi":"Weixin" } }, "currentTarget": { "id": "tapTest", "dataset": { "hi":"Weixin" } }, "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 }] }
事件分類:
事件分為冒泡事件和非冒泡事件:
- 冒泡事件:當一個元件上的事件被觸發後,該事件會向父節點傳遞。
- 非冒泡事件:當一個元件上的事件被觸發後,該事件不會向父節點傳遞。
WXML的冒泡事件列表:
touchstart:手指觸控動作開始
touchmove:手指觸控後移動
touchcancel:手指觸控動作被打斷,如來電提醒,彈窗
touchend:手指觸控動作結束
tap:手指觸控後馬上離開
longpress:手指觸控後,超過350ms再離開,如果指定了事件回撥函式並觸發了這個事件,tap事件將不被觸發
longtap:手指觸控後,超過350ms再離開(推薦使用longpress事件代替)
transitionend:會在 WXSS transition 或 wx.createAnimation 動畫結束後觸發
animationstart:會在一個 WXSS animation 動畫開始時觸發
animationiteration:會在一個 WXSS animation 一次迭代結束時觸發
animationend:會在一個 WXSS animation 動畫完成時觸發
touchforcechange:在支援 3D Touch 的 iPhone 裝置,重按時會觸發
注:除上表之外的其他元件自定義事件如無特殊宣告都是非冒泡事件,如form的submit
事件,input的input
事件,scroll-view的scroll
事件,(詳見各個元件)
一、繫結輸入事件bindinput
1、需要給input標籤繫結input事件,這個事件bindinput在當值改變時就會觸發。
2、編寫input事件的執行邏輯。
3、通過事件源物件(e)來獲取輸入框中的值(e.detail.value),然後賦值給num.
把輸入框的值賦值給data當中使用setData方法。
獲取輸入框的值(e.detail.value)和自定義屬性(e.currentTarget.dataset .xxx)都是從事件源物件(e)獲取的。
獲取data資料模型中的值是通過this.data.xx來獲取的。注意:微信小程式中獲取資料模型中的值和給資料模型中的屬性賦值都與vue中的不一樣。
二、繫結單擊事件bindtap
繫結事件的時候不能直接進行傳參,否則會將方法名連同引數一起當作方法名。只能通過自定義屬性的方式傳參。
自定義屬性 operation,
獲取輸入框的值:e.detail.value;獲取自定義屬性的值:e.currentTarget.dataset.xxx;給data中的屬性賦值:this.setData();獲取data資料模型中的值:this.data.xxx;
繫結事件時不能帶引數,不能帶括號。事件傳值通過自定義屬性的方式。在事件觸發時獲取資料。