上一期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相關的技術故事/技術實戰經驗想要跟大家分享,歡迎留言聯繫我們哦~比心!