微信小程序 教程之事件
系列文章:
微信小程序 教程之WXSS
微信小程序 教程之引用
微信小程序 教程之事件
微信小程序 教程之模板
微信小程序 教程之列表渲染
微信小程序 教程之條件渲染
微信小程序 教程之?dāng)?shù)據(jù)綁定
微信小程序 教程之WXML
什么是事件
- 事件是視圖層到邏輯層的通訊方式。
- 事件可以將用戶的行為反饋到邏輯層進(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="MINA" 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": 1252,
"target": {
"id": "tapTest",
"offsetLeft": 0,
"offsetTop": 0,
"dataset": {
"hi": "MINA"
}
},
"currentTarget": {
"id": "tapTest",
"offsetLeft": 0,
"offsetTop": 0,
"dataset": {
"hi": "MINA"
}
},
"touches": [{
"pageX": 30,
"pageY": 12,
"clientX": 30,
"clientY": 12,
"screenX": 112,
"screenY": 151
}],
"detail": {
"x": 30,
"y": 12
}
}
事件詳解
事件分類
事件分為冒泡事件和非冒泡事件
1.冒泡事件:當(dāng)一個(gè)組件上的事件被觸發(fā)后,該事件會(huì)向父節(jié)點(diǎn)傳遞。
2.非冒泡事件:當(dāng)一個(gè)組件上的事件被觸發(fā)后,該事件不會(huì)向父節(jié)點(diǎn)傳遞。
WXML的冒泡事件列表:
| 類型 | 觸發(fā)條件 |
|---|---|
| touchstart | 手指觸摸 |
| touchmove | 手指觸摸后移動(dòng) |
| touchcancel | 手指觸摸動(dòng)作被打斷,如來(lái)電提醒,彈窗 |
| touchend | 手指觸摸動(dòng)作結(jié)束 |
| tap | 手指觸摸后離開(kāi) |
| longtap | 手指觸摸后,超過(guò)350ms再離開(kāi) |
注:除上表之外的其他組件自定義事件都是非冒泡事件,如<form/>的submit事件,<input/>的input事件,<scroll-view/>的scroll事件,(詳見(jiàn)各個(gè)組件)
事件綁定
事件綁定的寫法同組件的屬性,以key、value的形式。
key以bind或catch開(kāi)頭,然后跟上事件的類型,如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ā)handleTap1和handleTap2(因?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ì)象。
事件對(duì)象的屬性列表:
| 屬性 | 類型 | 說(shuō)明 |
|---|---|---|
| type | String | 事件類型 |
| timeStamp | Integer | 事件生成時(shí)的時(shí)間戳 |
| target | Object | 觸發(fā)事件的組件的一些屬性值集合 |
| currentTarget | Object | 當(dāng)前組件的一些屬性值集合 |
| touches | Array | 觸摸事件,觸摸點(diǎn)信息的數(shù)組 |
| detail | Object | 額外的信息 |
通用事件類型
timeStamp
該頁(yè)面打開(kāi)到觸發(fā)事件所經(jīng)過(guò)的毫秒數(shù)。
target
觸發(fā)事件的源組件。
| 屬性 | 說(shuō)明 |
|---|---|
| id | 事件源組件的id |
| dataset | 事件源組件上由data-開(kāi)頭的自定義屬性組成的集合 |
| offsetLeft, offsetTop | 事件源組件的坐標(biāo)系統(tǒng)中偏移量 |
currentTarget
事件綁定的當(dāng)前組件。
| 屬性 | 說(shuō)明 |
|---|---|
| id | 當(dāng)前組件的id |
| dataset | 當(dāng)前組件上由data-開(kāi)頭的自定義屬性組成的集合 |
| offsetLeft, offsetTop | 當(dāng)前組件的坐標(biāo)系統(tǒng)中偏移量 |
說(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。 書(shū)寫方式: 以data-開(kāi)頭,多個(gè)單詞由連字符-鏈接,不能有大寫(大寫會(huì)自動(dòng)轉(zhuǎn)成小寫)如data-element-type,最終在event.target.dataset中會(huì)將連字符轉(zhuǎn)成駝峰e(cuò)lementType。
示例:
<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è)觸摸點(diǎn)的數(shù)組,每個(gè)觸摸點(diǎn)包括以下屬性:
| 屬性 | 說(shuō)明 |
|---|---|
| pageX,pageY | 距離文檔左上角的距離,文檔的左上角為原點(diǎn) ,橫向?yàn)閄軸,縱向?yàn)閅軸 |
| clientX,clientY | 距離頁(yè)面可顯示區(qū)域(屏幕除去導(dǎo)航條)左上角距離,橫向?yàn)閄軸,縱向?yàn)閅軸 |
| screenX,screenY | 距離屏幕左上角的距離,屏幕左上角為原點(diǎn),橫向?yàn)閄軸,縱向?yàn)閅軸 |
特殊事件所攜帶的數(shù)據(jù),如表單組件的提交事件會(huì)攜帶用戶的輸入,媒體的錯(cuò)誤事件會(huì)攜帶錯(cuò)誤信息,詳見(jiàn)組件定義中各個(gè)事件的定義。
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
微信小程序 支付后臺(tái)java實(shí)現(xiàn)實(shí)例
這篇文章主要介紹了微信小程序 支付后臺(tái)java實(shí)現(xiàn)實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-05-05
JavaScript中document.activeELement焦點(diǎn)元素介紹
這篇文章主要給大家分享 JavaScript中document.activeELement焦點(diǎn)元素介紹,下面文章圍繞了document.activeElement屬性展開(kāi)詳細(xì)內(nèi)容,需要的朋友可以參考一下,希望對(duì)大家有所幫助2021-11-11
JS仿照3D手辦模型展臺(tái)實(shí)現(xiàn)示例詳解
這篇文章主要為大家介紹了JS 實(shí)現(xiàn)偽3D手辦模型展臺(tái)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09
詳解微信小程序如何實(shí)現(xiàn)類似ChatGPT的流式傳輸
這篇文章主要為大家介紹了微信小程序如何實(shí)現(xiàn)類似ChatGPT的流式傳輸示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03
微信小程序?qū)崿F(xiàn)多個(gè)按鈕toggle功能的實(shí)例
這篇文章主要介紹了微信小程序?qū)崿F(xiàn)多個(gè)按鈕toggle功能的實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-06-06
微信小程序 頁(yè)面跳轉(zhuǎn)及數(shù)據(jù)傳遞詳解
這篇文章主要介紹了微信小程序 頁(yè)面跳轉(zhuǎn)及數(shù)據(jù)傳遞詳解的相關(guān)資料,需要的朋友可以參考下2017-03-03
JS跨域(Access-Control-Allow-Origin)前后端解決方案詳解
這篇文章主要介紹了瀏覽器跨域(Access-Control-Allow-Origin)解決方案詳解包括了前端跨域,后端跨域,js原生實(shí)現(xiàn)jsonp,jQuery實(shí)現(xiàn)jsonp,vue.js實(shí)現(xiàn)jsonp,需要的朋友可以參考下2022-01-01

