W3Cschool
恭喜您成為首批注冊(cè)用戶(hù)
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
事件提供了一種可以將用戶(hù)的行為從視圖層反饋到邏輯層進(jìn)行處理的通訊方式。觸發(fā)綁定在組件上的事件的時(shí)候,就會(huì)執(zhí)行邏輯層中對(duì)應(yīng)的事件處理函數(shù),同時(shí)也可以傳遞數(shù)據(jù),例如 id,dataset 等。
目標(biāo):在組件中綁定一個(gè)事件處理函數(shù) bindtap 。
模板:
<view id="swanTap" data-say="hello" bindtap="tapHandle"> 點(diǎn)擊 </view>
定義事件的處理函數(shù):
Page({
tapHandle(e) {
swan.showToast(e.currentTarget.dataset.say);
}
});
效果:當(dāng)用戶(hù)單擊組件時(shí),顯示:"hello"。
與瀏覽器的 DOM 事件類(lèi)似,智能小程序的視圖中事件分為冒泡事件和非冒泡事件。
冒泡事件如下表,不在列表的事件均為非冒泡事件。
事件類(lèi)型 | 觸發(fā)時(shí)機(jī) |
---|---|
tap | 觸摸后馬上離開(kāi) |
longtap | 觸摸后超過(guò) 350ms 再離開(kāi)(推薦使用 longpress 事件代替) |
longpress | 觸摸后超過(guò) 350ms 再離開(kāi),如果是指定了事件回調(diào)函數(shù)并觸發(fā)了這個(gè)事件,tap 事件將不被觸發(fā) |
touchstart | 觸摸開(kāi)始時(shí) |
touchmove | 觸摸后移動(dòng)時(shí) |
touchcancel | 觸摸后被打斷時(shí),如來(lái)電等 |
touchend | 觸摸結(jié)束時(shí) |
touchforcechange | 支持 3D Touch 的 iPhone 設(shè)備,重按時(shí)會(huì)觸發(fā)。 |
transitionend | 會(huì)在 transition 或 swan.createAnimation 動(dòng)畫(huà)結(jié)束后觸發(fā) |
animationstart | 會(huì)在 animation 動(dòng)畫(huà)開(kāi)始時(shí)觸發(fā) |
animationiteration | 會(huì)在 animation 一次迭代結(jié)束時(shí)觸發(fā) |
animationend | 會(huì)在 animation 動(dòng)畫(huà)完成時(shí)觸發(fā) |
事件綁定在組件上,與屬性的寫(xiě)法相同(以 key、value 的形式)。
代碼示例
<view id="wrap" bindtap="handleTap1">
wrap
<view id="module" catchtap="handleTap2">
module
<view id="text" bindtap="handleTap3">
text
</view>
</view>
</view>
效果:
捕獲階段是位于冒泡階段之前,在捕獲階段中,事件到達(dá)節(jié)點(diǎn)的順序與冒泡階段恰好相反。在捕獲階段監(jiān)聽(tīng)的方式是采用capture-bind、capture-catch關(guān)鍵字,后者將中斷捕獲階段和取消冒泡階段。
代碼示例:capture-bind
<view id="wrap" bind:touchstart="handleTap1" capture-bind:touchstart="handleTap2">
wrap
<view id="inner" bind:touchstart="handleTap3" capture-bind:touchstart="handleTap4">
text
</view>
</view>
效果:
代碼示例:capture-catch
<view id="wrap" bind:touchstart="handleTap1" capture-catch:touchstart="handleTap2">
wrap
<view id="inner" bind:touchstart="handleTap3" capture-bind:touchstart="handleTap4">
text
</view>
</view>
效果:
默認(rèn)當(dāng)組件觸發(fā)事件時(shí),邏輯層綁定事件的處理函數(shù)會(huì)收到一個(gè)默認(rèn)參數(shù),即事件對(duì)象。
下面是事件對(duì)象詳細(xì)屬性列表:
屬性 | 類(lèi)型 | 說(shuō)明 |
---|---|---|
type | String | 事件的類(lèi)型 |
timeStamp | Integer | 事件觸發(fā)的時(shí)間戳(毫秒) |
target | Object | 觸發(fā)事件的組件的屬性值集合 |
currentTarget | Object | 當(dāng)前組件的一些屬性值集合 |
detail | Object | 自定義事件對(duì)象屬性列表 |
touches | Array | 觸摸事件類(lèi)型存在,存放當(dāng)前停留在屏幕中的觸摸點(diǎn)信息的數(shù)組 |
changedTouches | Array | 觸摸事件類(lèi)型存在,存放當(dāng)前變化的觸摸點(diǎn)信息的數(shù)組, changedTouch changedTouch |
<view id="outer" catchtap="handleTap">
<view id="inner">點(diǎn)擊我</view>
</view>
下面是事件對(duì)象的屬性為屬性值集合時(shí)的詳細(xì)信息。這里需要注意的是 target 和 currentTarget 的區(qū)別,currentTarget 為當(dāng)前事件所綁定的組件,而 target 則是觸發(fā)該事件的源頭組件。
屬性 | 類(lèi)型 | 說(shuō)明 |
---|---|---|
id | String | 觸發(fā)事件組件的 id |
tagName | String | 觸發(fā)事件組件的類(lèi)型 |
dataset | Object | 觸發(fā)事件組件上由 data-開(kāi)頭的自定義屬性組成的集合, |
屬性 | 類(lèi)型 | 說(shuō)明 |
---|---|---|
id | String | 事件綁定的組件的 id |
tagName | String | 事件綁定的組件的類(lèi)型 |
dataset | Object | 事件綁定的組件上由 data-開(kāi)頭的自定義屬性組成的集合 |
是自定義事件所攜帶的數(shù)據(jù)。
在組件的事件被觸發(fā)時(shí),也可以傳遞自定義的數(shù)據(jù)。書(shū)寫(xiě)方式: 以 data- 開(kāi)頭,多個(gè)單詞由連字符-鏈接,不能有大寫(xiě)(大寫(xiě)會(huì)自動(dòng)轉(zhuǎn)成小寫(xiě)),最終的 - 在 dataset 中會(huì)將連字符轉(zhuǎn)成駝峰式寫(xiě)法。如組件上data-car-color屬性值的讀取方式是: event.currentTarget.dataset.carColor。
屬性 | 類(lèi)型 | 說(shuō)明 |
---|---|---|
identifier | Number | 觸摸點(diǎn)的標(biāo)識(shí)符 |
clientX, clientY | Number | 距離頁(yè)面可顯示區(qū)域(屏幕除去導(dǎo)航條)左上角的 X 軸與 Y 軸的距離 |
pageX, pageY | Number | 距離文檔左上角的 X 軸與 Y 軸的距離 |
數(shù)據(jù)格式同 touches,指的是有變化的觸摸點(diǎn),如 touchstart(開(kāi)始),touchmove(變化),touchend,touchcancel(結(jié)束)等。
點(diǎn)擊事件的 detail 帶有的 x, y 同 pageX, pageY 代表距離文檔左上角的距離。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: