藉助雲開發數據庫實現小程序列表上拉刷新功能丨雲開發101

上一期101專欄中,我們介紹了如何藉助雲開發數據庫實現小程序的列表觸底自動加載功能,相對應的,小程序列表上拉刷新又該如何實現呢?本期專欄就來爲大家解答。

原理說明

在小程序中,如果我們希望實現上拉刷新的功能,則需要我們監聽小程序頁面的 onPullDownRefresh 事件,我們可以在這個方法中實現數據的加載和替換,從而實現數據的刷新和頁面的更新。

實現代碼

正常情況下的上拉刷新
首先,我們先來看一看一般情況下的上拉刷新功能的實現。這裏的「一般情況」是指你沒有使用 scroll-view 組件的場景,或者使用的是橫向的 scroll-view 的場景,列表是直接構建在頁面內部的,而不是構建在 scroll-view 內部的。

在這種情況下,我們如果希望在頁面上實現上拉刷新,需要在 app.json 中的 window 選項中,或者是頁面的配置中加入 enablePullDownRefresh,並將其配置爲 true

// app.json
{
   ...
   "window":{
       "enablePullDownRefresh":true
    }
    ...
}
// page.json
{
   "enablePullDownRefresh":true
}

配置好以後,我們就可以開始配置了。進入到我們需要實現下拉刷新的頁面,在這個頁面中,我們需要在 Page 的構造函數中添加 onPullDownRefresh 函數的監聽。

Page({
  onPullDownRefresh:function(){
      // 這裏我們需要進行頁面的加載。
    }
})

我們需要在 onPullDownRefresh 函數中,加入我們查詢數據的代碼,從而實現數據的更新和替換,大體上寫好的代碼如下:

Page({
  onPullDownRefresh:function(){
      let db = wx.cloud.database();
    // 查詢數據
    db.collection('records').get().then(res => {
      // 更新數據
      this.setData({
                data: res.data
      },()=>{
                wx.stopPullDownRefresh();  // 數據同步完成後,停止掉上拉刷新的動畫效果。
      })
    }).catch(err => {
      console.error(err)
    })
  }
})

在上面這段代碼中,我們在 onPullDownRefresh 方法中加入了 雲開發的數據庫查詢方法,並在數據庫查詢方法的成功回調中加入了 setData 的方法來更新數據,從而確保我們的小程序的頁面數據可以完成更新。

setData 方法的回調中,我加入了對 wx.stopPullDownRefresh 的調用,這個 API 可以停止掉小程序的 PullDownRefresh 的動效,從而避免掉數據更新完成了,但是頁面還處在下拉加載的狀態。

這樣,我們就足以處理絕大多數場景下的上拉刷新的情況了。

特殊情況下的上拉刷新

除了直接在頁面上使用上拉刷新的 API 以外,還會有另外一種場景,就是我們會將頁面頂部固定,下方的部分滾動,比如騰訊視頻的視頻播放頁面。這個頁面是在上方放置一個 Video Player,下方放置一個 scroll-view 來完成滑動,從而實現頂部的 Video Player 固定的效果。在這種情況下,我們應該如何實現上拉刷新呢?

其實也很簡單,我們只需要利用 scroll-view 組件的 bindscrolltoupper 事件來完成上拉刷新的功能。

在具體實現的時候,我們需要在 scroll-view 組件中加入對應的配置。

<scroll-view upper-threshold="50" bindscrolltoupper="onTopper">
<!--- 具體的內容 -->
</scroll-view>

然後,在對應的頁面中,加入具體的事件觸發,參考代碼如下:

Page({  
     onTopper:function(){
          wx.startPullDownRefresh();
          let db = wx.cloud.database();
           db.collection('records').get().then(res => {
      // 更新數據
      this.setData({
                data: res.data
      },()=>{
                wx.stopPullDownRefresh(); // 數據同步完成後,停止掉上拉刷新的動畫效果。
      })
    }).catch(err => {
      console.error(err)
    })
  }
})

這樣,我們就可以實現在 ScrollView 內部實現了一個上拉觸底的效果。

在這段代碼中,因爲我們沒有直接觸發頁面的上拉效果,所以這裏我們使用 wx.startPullDownRefresh 來觸發頁面的上拉效果,然後再使用雲開發的 API 來完成數據的加載,加載完成後,調用 wx.stopPullDownRefresh 方法,停掉上拉刷新的動畫效果。

這樣,即使我們沒有直接觸發頁面的事件,但可以達到類似的頁面效果。

總結

上拉刷新是一個我們很常用的功能,在使用時其實非常簡單,你只需要在特定的方法中調用相關的函數,來實現數據的重載,就可以實現上拉刷新的功能。


如果你有關於使用雲開發CloudBase相關的技術故事/技術實戰經驗想要跟大家分享,歡迎留言聯繫我們哦~比心!
圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章