小程序的下(xià)拉刷新和(hé)觸底追加内容 - 新聞資(zī)訊 - 雲南小程序開發|雲南軟件開發|雲南網站(zhàn)建設-西山區知普網絡科技工作室

159-8711-8523

雲南網建設/小程序開發/軟件開發

知識

不管是網站(zhàn),軟件還是小程序,都要直接或間接能為您産生價值,我們在追求其視覺表現的同時,更側重于功能的便捷,營銷的便利,運營的高效,讓網站(zhàn)成為營銷工具,讓軟件能切實提升企業(yè)内部管理水平和(hé)效率。優秀的程序為後期升級提供便捷的支持!

小程序的下(xià)拉刷新和(hé)觸底追加内容

發表時間:2021-1-5

發布人:葵宇科技

浏覽次數:36

本方法是利用頁面事件處理函數的 onPullDownRefresh 和(hé) onReachBottom 方法實現小程序的下(xià)拉刷新和(hé)觸底追加内容。

前提條件:

需要在app.json的window選項中(zhōng)或頁面配置中(zhōng)開啟enablePullDownRefresh。

屬性類型描述
enablePullDownRefreshBoolean是否開啟下(xià)拉刷新,詳見頁面相關(guān)事件處理函數。
// 這裡是index.json                           這裡我選擇在頁面配置中(zhōng)開啟,請添加以下(xià)語句 
{  "enablePullDownRefresh": true}
複制代碼

了解2個(gè)函數:

方法類型描述
onPullDownRefresh()function頁面相關(guān)事件處理函數——監聽用戶下(xià)拉動(dòng)作
當處理完數據刷新後,wx.stopPullDownRefresh可(kě)以停止當前頁面的下(xià)拉刷新
onReachBottom()function頁面上拉觸發底事件的處理函數
可(kě)以在app.json的window選項中(zhōng)或頁面配置中(zhōng)設置觸發距離(lí)onReachBottomDistance

讓我們看看它到底是什麼樣子(zǐ),相信你(nǐ)已經知道他們是如(rú)何觸發的吧

理一下(xià)思路(lù):

    要實現這個(gè)功能,先要知道在小程序開發中(zhōng),頁面中(zhōng)的内容是由數據驅動(dòng)的,所以·····
複制代碼

一、數據

  1. 你(nǐ)可(kě)以自己在Page({ 模拟數據 })

  2. 雲開發=>數據庫=>創建一個(gè)新的集合 =>添加記錄=>愛添加什麼鍵值對都可(kě)以

  3. 用接口去取得數據(這裡先不具體說明)

    
    

二、頁面

就像上面說的那樣,數據驅動(dòng)頁面,讓我們看看頁面中(zhōng)的是什麼樣子(zǐ)的吧

// 這裡是 index.wxml// 這裡有些陌生的标簽,不要緊,我隻是引入了vant weapp而已,
// 你(nǐ)用任何你(nǐ)喜歡的html标簽都可(kě)以實現
<van-cell-group>
  <block wx:for="{{tasks}}" wx:key="index">
    <navigator url="../todoInfo/todoInfo?id={{item._id}}">      
      <van-cell title="{{item.title}}" />    
    </navigator>  
  </block>
</van-cell-group>
複制代碼
// 這裡是 index.js

const db = wx.cloud.database()              // 創建一個(gè)database實例 
const todos = db.collection("todos")        // 取得數據庫中(zhōng)名為 "todos" 的集合

Page({  
  /*頁面的初始數據*/  
  data: {    
    tasks: [],    
    skip: 0  
  },
})
複制代碼

複制代碼 看到這裡是不是有了疑問(wèn)?

tasks是一個(gè)[ ] ,而它是空的,是如(rú)何變成下(xià)圖中(zhōng)的樣子(zǐ)?

skip 又是什麼?

我們取得的todos,為什麼還沒有出現?它本質上它是一個(gè)對象 {} 隻是這個(gè)花(huā)括号裡有許多我們塞進去的key 和(hé) value

記住他們,我将接着和(hé)你(nǐ)解釋。

看 ! 并沒有什麼複雜的東西 隻是通(tōng)過 wx:for"{{tasks}}" 
循環遍曆tasks并渲染到<van-cell  title="{{item.title}}"/ >而已。
它一條一條的出現在視圖中(zhōng)了。
複制代碼

如(rú)果你(nǐ)對Vue或者小程序有一些了解,那麼你(nǐ)将看得懂這段代碼在說一件什麼事。

三、探究如(rú)何實現?

下(xià)拉刷新和(hé)觸底追加内容

// 這裡是index.js 
const db = wx.cloud.database()       // 創建一個(gè)database實例 
const todos = db.collection("todos") // 取得數據庫中(zhōng)名為 "todos" 的集合

Page({
    /*頁面的初始數據*/
  data: {                       // 一堆的代碼對于任何人來說都感到頭痛,所以跟着我注釋看吧~
    tasks: [],
    skip: 0
  },
  /****頁面相關(guān)事件處理函數--監聽用戶下(xià)拉動(dòng)作****/
  onPullDownRefresh: function () {
    this.getData(res => {       // 這裡隻是調用了一個(gè)方法而已 接着注釋往下(xià)看它是什麼
      wx.stopPullDownRefresh()
      //将skip和(hé)tasks重置到初始狀态。
      this.data.skip = 0
      this.data.tasks = []
    })
  },

  /****頁面上拉觸底事件的處理函數****/
  onReachBottom: function () {  // 這裡隻是調用了一個(gè)方法而已 接着注釋往下(xià)看它是什麼
    // 顯示加載圖标
    console.log("到底了")
    this.getData(res => {})
  },
  
  /***********************getData是我自定義的函數***********************/
  getData: function (callback) {
    if (!callback) {
      callback = res => {}
    }
    wx.showLoading({
      title: '正在努力加載···',
    })
    
  // 這裡以下(xià)才是重要的部分// 注意todos我們之前已經得到它了
  
  // 下(xià)面這串代碼告訴我們,取得todos中(zhōng)的數據,每次它都會跳過this.data.skip條,每次都将數據通(tōng)過
  setData(),把tasks的值修改為 oldData和(hé)res.data拼接後的值。成功後将this.data.skip+20。
  // 随後你(nǐ)再看上面的代碼 他們都是在觸發條件的時候執行了getData而已,再順帶附加了進行了一
  些其他的操作

    todos.skip(this.data.skip).get().then(res => {
      // 用skip方法跳過已加載的部分 第一次跳過 0 條
      let oldData = http://www.wxapp-union.com/this.data.tasks
      this.setData({
        // 将跳過的數據 和(hé) 新加載 的拼接成新數據并渲染頁面 
        tasks: oldData.concat(res.data)
      }, res => {
        // 每次加20 則上面的skip每次就跳過 前20條
        this.data.skip += 20
        wx.hideLoading({
          success: (res) => {},
        })
        callback()
      })
    })
  },
複制代碼

起始渲染20條,是小程序約定的公共值

到底追加了12條,因為todos裡一共隻有32條


總結一下(xià)

  1. 就是通(tōng)過skip()方法,跳過已加載過的數據,

  2. 每次觸底都将已加載的數據和(hé)接下(xià)來要加載的數據進行拼接,并賦值給要渲染的data。

  3. 每次刷新再重置data并重新加載頁面。


作者:raotao
鍊接:https://juejin.im/post/6880536175501803527
來源:掘金
著作權歸作者所有。商(shāng)業(yè)轉載請聯系作者獲得授權,非商(shāng)業(yè)轉載請注明出處。

相關(guān)案例查看更多