国产chinesehdxxxx野外,国产av无码专区亚洲av琪琪,播放男人添女人下边视频,成人国产精品一区二区免费看,chinese丰满人妻videos

云開(kāi)發(fā) 點(diǎn)擊事件

2021-07-26 09:03 更新

事件是視圖層到邏輯層的通信方式,當(dāng)我們點(diǎn)擊tap、觸摸touch、長(zhǎng)按longpress小程序綁定了事件的組件時(shí),就會(huì)觸發(fā)事件,執(zhí)行邏輯層中對(duì)應(yīng)的事件處理函數(shù)。

小程序框架的視圖層由 WXML 與 WXSS 來(lái)編寫(xiě)的,由組件來(lái)進(jìn)行展示。將邏輯層的數(shù)據(jù)反應(yīng)成視圖,同時(shí)將視圖層的事件發(fā)送給邏輯層。邏輯層將數(shù)據(jù)進(jìn)行處理后發(fā)送給視圖層,同時(shí)接受視圖層的事件反饋。

頁(yè)面滾動(dòng)

使用開(kāi)發(fā)者工具新建一個(gè)tapevent的頁(yè)面(直接在app.json的pages配置項(xiàng)第一行添加一個(gè)tapevent的頁(yè)面,由于是第一項(xiàng),這樣就可以成為小程序的首頁(yè)呈現(xiàn)出來(lái)),然后將以下代碼輸入到tapevent.wxml文件里:

<button type="primary" bindtap="scrollToPosition">滾動(dòng)到頁(yè)面指定位置</button>
<view class="pagetop" style="background-color:#333;width:100%;height:400px"></view>
<button type="primary" bindtap="scrollToTop">滾動(dòng)到頁(yè)面頂部(返回頂部)</button>
<view id="pageblock" style="background-color:#333;width:100%;height:400px"></view>

這里的type="primary"只是引入weui給button添加的樣式。而函數(shù)名scrollToPosition和scrollToTop是可以自己定義的,然后我們?cè)賮?lái)在相應(yīng)的js文件里要添加和函數(shù)名scrollToPosition和scrollToTop對(duì)應(yīng)的事件處理函數(shù)。

在tapevent.js的Page({})里(也就是和 data:{}onLoad: function (options) { }等函數(shù)平級(jí)),輸入以下代碼:

  scrollToTop() {
    wx.pageScrollTo({
      scrollTop: 0,
      duration: 300
    })
  },

 
  scrollToPosition() {
    wx.pageScrollTo({
      scrollTop: 6000,
      duration: 300
    })
  },

當(dāng)用戶點(diǎn)擊該button組件的時(shí)候會(huì)在該頁(yè)面對(duì)應(yīng)的Page中找到相應(yīng)的事件處理函數(shù)。保存編譯之后,看看是不是就有了頁(yè)面滾動(dòng)的效果了?原理是scrollToTop()和scrollToPosition()這兩個(gè)函數(shù)實(shí)際上都是調(diào)用了同一個(gè)小程序的滾動(dòng)API wx.pageScrollTo(),關(guān)于該API的具體參數(shù)信息,我們可以查閱技術(shù)文檔。

滾動(dòng)API技術(shù)文檔:wx.pageScrollTo(Object object)

在官方文檔我們可以看到wx.pageScrollTo()的作用是將頁(yè)面滾動(dòng)到目標(biāo)位置,支持選擇器和滾動(dòng)距離兩種方式定位

  • scrollTop滾動(dòng)到頁(yè)面的目標(biāo)位置,單位 px,值為0就是滾動(dòng)到頂部;值為600就是
  • duration是滾動(dòng)動(dòng)畫(huà)的時(shí)長(zhǎng),單位為ms,而1秒=1000毫秒

那如何滾動(dòng)到指定的選擇器的位置呢?前面我們已經(jīng)給view分別添加了id和class的選擇器,只需要將之前的函數(shù)的配置信息修改為如下(注意哦,如果你是添加而不是修改,函數(shù)名會(huì)沖突的,或者你可以起其他的函數(shù)名):

  scrollToTop() {
    wx.pageScrollTo({
      duration: 3000,
      selector:".pagetop"
    })
  },

 
  scrollToPosition() {
    wx.pageScrollTo({
      duration: 300,
      selector:"#pageblock"
    })
  },

小任務(wù):如果只是在組件上綁定了事件也就是只有 bindtap="scrollToPosition",但是并沒(méi)有在js文件里寫(xiě)相應(yīng)的事件處理函數(shù)scrollToPosition,看一下控制臺(tái)Console會(huì)報(bào)什么錯(cuò)?

不要誤以為只有button組件才可以綁定事件哦,還記得我們小程序組件里看的技術(shù)文檔小程序組件嗎?在公共屬性部分,可以看到所有組件都有以下屬性bind / catch,這個(gè)屬性的類型是EventHandler,bindtap就是bind*的一個(gè)類型。也就是說(shuō)小程序的所有組件都可以通過(guò)以上方法觸發(fā)事件處理函數(shù),達(dá)到滾動(dòng)等效果。使用button為案例只是為了便于展示而已。

命名規(guī)范:JavaScript的項(xiàng)目名、函數(shù)名、變量等都應(yīng)該遵循簡(jiǎn)潔、語(yǔ)義化的原則。函數(shù)名推薦使用駝峰法來(lái)命名(camelCase),比如scrollToTop、pageScrollTo,也就是由小寫(xiě)字母開(kāi)始,后續(xù)每個(gè)單詞首字母都大寫(xiě),長(zhǎng)得跟駱駝????的駝峰似的。

消息提示框Toast

消息提示框是移動(dòng)端App、H5(WebApp)、小程序經(jīng)常會(huì)使用到的一個(gè)交互界面。在tapevent.wxml輸入代碼:

<button type="primary" bindtap="toastTap">點(diǎn)擊彈出消息對(duì)話框</button>

在js里輸入以下代碼:

  toastTap() {
    wx.showToast({
      title: '購(gòu)買(mǎi)成功',
      icon: 'success',
      duration: 2000
    })
  },

消息提示技術(shù)文檔:wx.showToast(Object object)

  • title:為必填,提示的內(nèi)容
  • icon:只有三個(gè)選項(xiàng),success、loading、none,大家可以自行測(cè)試一下三個(gè)不同取值的效果
  • duration:提示延遲的時(shí)間,默認(rèn)為1500毫秒,也就是1.5秒

小任務(wù):修改title、icon和duration,以及添加image屬性,看看會(huì)有什么樣不同的表現(xiàn)形式,以及你在哪個(gè)App的何種場(chǎng)景下見(jiàn)過(guò)類似的消息提示信息?

模態(tài)對(duì)話框

為了讓界面顯示的更加簡(jiǎn)潔,你可以使用快捷鍵Ctrl+/(Mac為Command+/)來(lái)將上面wxml里的代碼注釋掉,js文件里面的函數(shù)就不用注釋啦

使用開(kāi)發(fā)者工具繼續(xù)在tapevent.wxml文件里添加代碼,這次我們會(huì)調(diào)用一下小程序的模態(tài)框(還是強(qiáng)調(diào)modalTap是你可以根據(jù)命名規(guī)范任意命名的,只需要在js里添加相應(yīng)的事件處理函數(shù)就可以調(diào)用API):

<button type="primary" bindtap="modalTap">顯示模態(tài)對(duì)話框</button>

然后再在tapevent.js中輸入以下代碼:

  modalTap() {
    wx.showModal({
      title: '學(xué)習(xí)聲明',
      content: '學(xué)習(xí)小程序的開(kāi)發(fā)是一件有意思的事情,我決定每天打卡學(xué)習(xí)',
      showCancel: true,
      confirmText: '確定',
      success(res) {
        if (res.confirm) {
          console.log('用戶點(diǎn)擊了確定')
        } else if (res.cancel) {
          console.log('用戶點(diǎn)擊了取消')
        }
      }
    })
  },

保存編譯之后,點(diǎn)擊模擬器上的按鈕,就可以顯示出一個(gè)對(duì)話框,這個(gè)對(duì)話框我們稱之為Modal模態(tài)對(duì)話框。

模態(tài)對(duì)話框技術(shù)文檔:wx.showModal(Object object)

千變?nèi)f化之API

閱讀API的技術(shù)文檔,就要了解該API有哪些屬性,屬性代表得是什么含義,屬性是什么類型(這一點(diǎn)非常重要),以及它的默認(rèn)值是什么,可以有哪些取值。

  • title屬性不是必填,刪除title的賦值,就不會(huì)顯示標(biāo)題啦;
  • content屬性也不是必填,為提示的內(nèi)容;
  • showCancel默認(rèn)值就是true,意思是默認(rèn)顯示取消按鈕,改為false就不顯示了
  • confirmText默認(rèn)值為確定,你可以改成別的試試

通過(guò)給API已有的屬性賦不同的值,API所展現(xiàn)的內(nèi)容就會(huì)有很多種變化,而具體要怎么用,則需要你根據(jù)實(shí)際的小程序開(kāi)發(fā)項(xiàng)目來(lái)使用了。

小任務(wù):在哪些App、小程序、H5(WebApp)你會(huì)看到模態(tài)框?這些模態(tài)框是在什么情況下出現(xiàn)的,它的作用是啥?你能模仿這些模態(tài)框?qū)懸幌屡渲眯畔幔?/p>

console.log日志打印

點(diǎn)擊模態(tài)框上面的取消、確定按鈕,留意一下開(kāi)發(fā)者工具調(diào)試器Console的日志打印信息:當(dāng)我們點(diǎn)擊取消按鈕時(shí),會(huì)打印“用戶點(diǎn)擊了取消”;當(dāng)我們點(diǎn)擊確定按鈕時(shí),會(huì)打印“用戶點(diǎn)擊了確定”,而這打印的結(jié)果是由上面的這段代碼輸出的:

success(res) {
  if (res.confirm) {
    console.log('用戶點(diǎn)擊了確定')
  } else if (res.cancel) {
    console.log('用戶點(diǎn)擊了取消')
  }
}

那這段代碼到底怎么理解呢?除了 console.log('用戶點(diǎn)擊了確定'),這個(gè)之前接觸過(guò)可以理解外,res是什么?res.confirm、res.cancel是什么,從哪里來(lái)的?我們可以使用console.log()打印一下。將上面這段代碼增加一些打印信息。

success(res) {
  console.log(res)
  if (res.confirm) {
    console.log(res)
    console.log("點(diǎn)擊確認(rèn)之后的res.confirm是:" + res.confirm)
    console.log("點(diǎn)擊確認(rèn)之后的res.cancel是:" + res.cancel)
  } else if (res.cancel) {
    console.log(res)
    console.log('用戶點(diǎn)擊了取消')
    console.log("點(diǎn)擊取消之后的res.confirm是:" + res.confirm)
    console.log("點(diǎn)擊取消之后的res.cancel是:" + res.cancel)
  }
}

再來(lái)編譯之后點(diǎn)擊模態(tài)框的取消和確定按鈕,看打印出來(lái)什么結(jié)果。當(dāng)點(diǎn)擊確認(rèn)時(shí),res.confirm的值為true,就執(zhí)行if分支里的語(yǔ)句;當(dāng)res.cancel的值為true,就執(zhí)行res.cancel的語(yǔ)句。在模態(tài)對(duì)話框技術(shù)文檔:wx.showModal(Object object)也有object.success 回調(diào)函數(shù)的說(shuō)明。

success、fail、complete回調(diào)函數(shù) 在技術(shù)文檔里可以看到屬性里有success和fail兩個(gè)回調(diào)函數(shù),success為接口調(diào)用成功的回調(diào)函數(shù);fail為接口調(diào)用失敗的回調(diào)函數(shù)。關(guān)于這方面的知識(shí)大家可以閱讀技術(shù)文檔小程序API,大致了解一下異步API與回調(diào)函數(shù)的參數(shù),理解異步 API 的執(zhí)行結(jié)果需要通過(guò) Object 類型的參數(shù)中傳入的對(duì)應(yīng)回調(diào)函數(shù)獲取。(不理解也沒(méi)有關(guān)系)

手機(jī)振動(dòng)

手機(jī)振動(dòng)API分兩種,一種是長(zhǎng)振動(dòng),一種是短振動(dòng),兩個(gè)API寫(xiě)法大致相同,為了體驗(yàn)效果,我們以長(zhǎng)振動(dòng)為例,在tapevent.wxml里輸入以下代碼,

<button type="primary" bindtap="vibrateLong">長(zhǎng)振動(dòng)</button>

然后再在tapevent.js里添加與之對(duì)應(yīng)的事件處理函數(shù):

  vibrateLong() {
    wx.vibrateLong({
      success(res) {
        console.log(res)
      },
      fail(err) {
        console.error(err)
      },
      complete() {
        console.log('振動(dòng)完成')
      }
    })
  },

保存編譯之后,點(diǎn)擊預(yù)覽,使用手機(jī)掃描來(lái)體驗(yàn)一下長(zhǎng)振動(dòng)的效果。

長(zhǎng)振動(dòng)技術(shù)文檔:wx.vibrateLong()

在長(zhǎng)振動(dòng)技術(shù)文檔里我們?cè)俅慰吹紸PI里三個(gè)回調(diào)函數(shù),success、fail、complete。在模擬器上點(diǎn)擊按鈕時(shí),就可以看到打印日志。console.error向控制臺(tái)的console中打印 error 日志,如果不能調(diào)用長(zhǎng)振動(dòng),那一般是手機(jī)權(quán)限的問(wèn)題了。

小任務(wù):參考長(zhǎng)振動(dòng)的代碼以及短振動(dòng)的技術(shù)文檔,寫(xiě)一個(gè)短振動(dòng)的案例,體驗(yàn)一下兩者有什么不同。

彈出操作菜單

下面我們來(lái)了解一下操作操作,在tapevent.wxml輸入以下代碼

<button type="default" bindtap="actionSheetTap">彈出操作菜單</button>

然后再在tapevent.js里添加與之對(duì)應(yīng)的事件處理函數(shù):

  actionSheetTap() {
    wx.showActionSheet({
      itemList: ['添加照片', '刪除照片', '更新照片', '查詢更多'],
      success(e) {
        console.log(e.tapIndex)
      }
    })
  },

彈出菜單技術(shù)文檔:wx.showActionSheet(Object object)

保存之后在模擬器體驗(yàn),點(diǎn)擊按鈕就會(huì)彈出顯示添加照片、刪除照片、更新照片、查詢更多等選項(xiàng)的操作菜單,當(dāng)然我們點(diǎn)擊操作菜單的選項(xiàng)之后是沒(méi)有反應(yīng)的,點(diǎn)擊之后的反應(yīng)還需要我們以后來(lái)寫(xiě)事件處理函數(shù)才行。

success回調(diào)函數(shù)

當(dāng)我們點(diǎn)擊操作菜單的不同選項(xiàng)時(shí),會(huì)返回不同的數(shù)字,這取決于success回調(diào)函數(shù)里的e.tapIndex的值。在官方文檔里我們可以了解到,當(dāng)用戶點(diǎn)擊的按鈕序號(hào),從上到下的順序,從0開(kāi)始,相當(dāng)于對(duì)應(yīng)著數(shù)組itemList的序號(hào),這樣就為我們以后根據(jù)不同的菜單選項(xiàng)來(lái)執(zhí)行不同的操作提供了可能。

小任務(wù):在success(e){}回調(diào)函數(shù)里,添加console.log(e)打印e以及console.log(e.errMsg)打印e的errMsg對(duì)象看看是什么結(jié)果。

頁(yè)面路由

頁(yè)面路由是一個(gè)非常重要的概念,打開(kāi)新頁(yè)面、頁(yè)面返回、Tab頁(yè)面切換、頁(yè)面重定向等都是也能路由的不同方式。

關(guān)于頁(yè)面路由,大家可以閱讀一下頁(yè)面路由技術(shù)文檔,頁(yè)面路由我們可以簡(jiǎn)單的理解為對(duì)頁(yè)面鏈接的管理,根據(jù)不同的url鏈接來(lái)顯示不同的內(nèi)容和頁(yè)面信息。在后面的章節(jié)我們還會(huì)具體講一下頁(yè)面路由的知識(shí)的,不必苛求一次性都搞明白。

Navigator組件與頁(yè)面路由API

在前面我們已經(jīng)學(xué)習(xí)過(guò)Navigator組件,在navigator組件的技術(shù)文檔里,我們可以看到open-type屬性以及合法值。在小程序API左側(cè)也可以看到5個(gè)不同的API。它們之間的對(duì)應(yīng)關(guān)系如下:

頁(yè)面路由API Navigator open-type值 含義
redirectTo redirect 關(guān)閉當(dāng)前頁(yè)面,跳轉(zhuǎn)到應(yīng)用內(nèi)的某個(gè)頁(yè)面。但是不允許跳轉(zhuǎn)到 tabbar 頁(yè)面。
navigateTo navigate 保留當(dāng)前頁(yè)面,跳轉(zhuǎn)到應(yīng)用內(nèi)的某個(gè)頁(yè)面。但是不能跳到 tabbar 頁(yè)面。
navigateBack navigateBack 關(guān)閉當(dāng)前頁(yè)面,返回上一頁(yè)面或多級(jí)頁(yè)面。
switchTab switchTab 跳轉(zhuǎn)到 tabBar 頁(yè)面,并關(guān)閉其他所有非 tabBar 頁(yè)面
reLaunch reLaunch 關(guān)閉所有頁(yè)面,打開(kāi)到應(yīng)用內(nèi)的某個(gè)頁(yè)面

也就是說(shuō)Navigator組件可以做到的事情,使用JavaScript調(diào)用小程序也能路由API也可以做到。Navigator組件的內(nèi)容是寫(xiě)死的,而JavaScript則可以提供動(dòng)態(tài)的數(shù)據(jù)。

跳轉(zhuǎn)到新頁(yè)面與Tab頁(yè)

我們可以在之前創(chuàng)建的home.wxml里輸入以下代碼:

<button bindtap="navigateTo">保留頁(yè)面并跳轉(zhuǎn)</button>
<button bindtap="switchTab">跳轉(zhuǎn)到組件Tab頁(yè)</button>
<button bindtap="redirectTo">關(guān)閉當(dāng)前頁(yè)面跳轉(zhuǎn)</button>

然后在home.js文件里添加以下代碼:

navigateTo() {
    wx.navigateTo({
        url: '/pages/home/imgshow/imgshow'
    })
},
switchTab() {
    wx.switchTab({
        url: '/pages/list/list',
    })
},
redirectTo() {
    wx.redirectTo({
        url: '/pages/home/imgshow/imgshow'
    })
},

保存之后在開(kāi)發(fā)者工具的模擬器點(diǎn)擊按鈕,就實(shí)現(xiàn)了頁(yè)面和Tab頁(yè)的切換效果。在前面我們提到bintap是小程序所有組件的公有屬性,只有bintap綁定了頁(yè)面路由切換的事件處理函數(shù),組件是不是Navigator也就不重要了,也就是鏈接跳轉(zhuǎn)不再是Navigator組件的專利。

注意這里的url的路徑,我們使用的是相對(duì)于小程序根目錄的絕對(duì)路徑。app.json的pages配置項(xiàng)前面沒(méi)有/是因?yàn)閍pp.json本來(lái)就在根目錄,所以可以使用相對(duì)路徑以及這里的取值,以及API很多參數(shù)的字符串String類型的賦值,單引號(hào)和雙引號(hào)都是沒(méi)有影響的。

返回上一頁(yè)

在home頁(yè)面里的imgshow文件夾下的imgshow.wxml(在小程序開(kāi)發(fā)的第一部分建過(guò)這個(gè)頁(yè)面,如果沒(méi)有,你再創(chuàng)建也可以)輸入以下代碼:

<button bindtap="navigateBack">返回上一頁(yè)</button>

在imgshow.js里添加以下代碼

navigateBack() {
    wx.navigateBack({
        delta: 1
    })
},

點(diǎn)擊保留頁(yè)面跳轉(zhuǎn)按鈕以及返回上一頁(yè)按鈕,這樣我們就可以在小程序里通過(guò)點(diǎn)擊組件實(shí)現(xiàn)了頁(yè)面的切換與頁(yè)面的返回。而如果是使用wx.redirectTo跳轉(zhuǎn)到新的頁(yè)面就沒(méi)法使用返回上一頁(yè)了。

wx.navigateTo 是保留當(dāng)前頁(yè)面、跳轉(zhuǎn)到應(yīng)用內(nèi)的某個(gè)頁(yè)面,使用 wx.navigateBack可以返回到原頁(yè)面。對(duì)于頁(yè)面不是特別多的小程序,且頁(yè)面間存在經(jīng)常切換時(shí),推薦使用 wx.navigateTo進(jìn)行跳轉(zhuǎn), 然后返回,提高加載速度。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)