微信小程序之觸控事件(六)

微信小程序之入門篇(一)
微信小程序之注冊(cè)篇(二)
微信小程序之開發(fā)初體驗(yàn)(三)——開發(fā)工具使用和目錄結(jié)構(gòu)
微信小程序之生命周期(四)
微信小程序之?dāng)?shù)據(jù)綁定(五)
微信小程序之觸控事件(六)
微信小程序之基礎(chǔ)組件篇——視圖容器(七)
微信小程序之基礎(chǔ)組件篇——基礎(chǔ)內(nèi)容(八)
微信小程序之基礎(chǔ)組件篇——表單組件(九)
微信小程序之基礎(chǔ)組件篇——導(dǎo)航組件(十)
微信小程序之基礎(chǔ)組件篇——媒體組件(十一)
微信小程序之API篇——豆瓣圖書搜索(十二)
微信小程序之拓展篇——weui-wxss(十三)

什么是事件

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

事件分類

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

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

WXML的冒泡事件列表:

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

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

事件綁定

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

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

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

在編寫代碼中,使用頻率高的事件方式是

  • 單擊——tap
  • 長(zhǎng)按——longtap
  • 滑動(dòng)——touchstart、touchmove、touchend、touchcancel

細(xì)心的讀者可能會(huì)發(fā)現(xiàn),點(diǎn)擊事件中,還有一個(gè)很重要的事件——雙擊,小程序竟然沒有實(shí)現(xiàn),真是神奇。不過可以通過單擊事件模擬雙擊時(shí)間實(shí)現(xiàn)。查閱資料發(fā)現(xiàn),電腦或者手機(jī)的雙擊事件都是300ms內(nèi)連續(xù)點(diǎn)擊,所以本文也采用300ms以內(nèi)連續(xù)點(diǎn)擊視為雙擊事件。

<!--index.wxml-->
<view>
    <button bindtap="binddoubletap">點(diǎn)擊</button>
</view>
//index.js
Page({
  data: {
    //上一次點(diǎn)擊的時(shí)間
    lastTapTime:0
  },
  binddoubletap:function(e){
    //獲取點(diǎn)擊當(dāng)前時(shí)間
    var curTime = e.timeStamp
    //上一次點(diǎn)擊的時(shí)間
    var lastTime = this.data.lastTapTime
    if(lastTime > 0){
       //電腦雙擊事件間隔為300ms以內(nèi),這里也用300ms間隔吧
      if(curTime - lastTime <300){
        console.log("雙擊事件觸發(fā)")
      }else{
        console.log("單擊事件觸發(fā)")
      }
    }else{
      console.log("單擊事件觸發(fā)")
    }
     //保存本次點(diǎn)擊的時(shí)間
    this.setData({
      lastTapTime: curTime
    })
  }
})
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容