微信小程序?qū)崿F(xiàn)觸底加載與下拉刷新的示例代碼
在最近做小程序的時候有這么一個很常見的需求,加載一個信息列表,要求需要觸底加載和下拉刷新,我突然想起來掘金小冊界面和這個需求很相似,接下來我給大家介紹一下我的實現(xiàn)方案。
觸底加載
步驟如下:
- 封裝一個loader函數(shù)
- 在監(jiān)聽頁面加載的時候觸發(fā)這個loader函數(shù)
- 在監(jiān)聽到觸底的時候再次觸發(fā)這個函數(shù)
onLoad: function (options) { this.loadBooks(this.data.books.length) }, onReachBottom: function () { this.loadBooks(this.data.books.length) }, loadBooks: function () { },
注意這里的生命周期函數(shù):onload
為監(jiān)聽頁面加載生命周期,onReachBottom
為監(jiān)聽觸底動作生命周期。
loader函數(shù)思考
loader函數(shù)的封裝首先取決與我們的業(yè)務(wù)邏輯,首先根據(jù)我們的業(yè)務(wù)來思考,
我們想要通過觸底來獲取數(shù)據(jù),所以我們需要固定住我們每次獲取數(shù)據(jù)的數(shù)量,其次,為了避免重復(fù),我們不能重復(fù)獲取,就要考慮從為獲取的數(shù)據(jù)項開始獲取,下面實現(xiàn)過程中的skip(n)
是必要的,即傳進來的參數(shù)為從第n項開始,我們在監(jiān)聽和觸底傳參都為當(dāng)下數(shù)組的長度,因為當(dāng)頁面剛加載的時候數(shù)組長度為0,當(dāng)觸底的時候,數(shù)組長度恰為當(dāng)前已經(jīng)獲取的數(shù)據(jù)項,所以之后就可以獲取未獲得的數(shù)據(jù)并于之前的數(shù)組合并。
loader函數(shù)實現(xiàn)
其實loader函數(shù)的實現(xiàn)才是觸底加載功能的核心,正常情況下觸底加載的邏輯是通過觸底累加一個數(shù)字代表頁碼數(shù),然后將頁碼數(shù)發(fā)送給服務(wù)端,服務(wù)端再將信息數(shù)組返回,我使用的是云開發(fā),所以解決方案有所不同。
- 調(diào)用wx云開發(fā)的api,
skip(n)
從集合的第n項開始獲取limit(n)
獲取至多n個元素。 - 通過get獲取相應(yīng)數(shù)據(jù),這里為n項后6個數(shù)據(jù)。
- 通過
cancat()
實現(xiàn)數(shù)組的合并
需要注意的是這里的limit(n)
直接使用是有20的長度限制,如果有剛需,需要獲取20個以上的數(shù)據(jù)集合,那么我們可以在云函數(shù)中去解決。
loadBooks: function (n) { wx.cloud.database().collection('books').skip(n).limit(6).get().then(res => { console.log(res.data) this.setData({ books: this.data.books.concat(res.data) }) }) },
觸底加載動畫
關(guān)于觸底加載動畫,我是在codepen參考的,只需要在觸底的時候,將控制動畫元素的變量更改,在數(shù)據(jù)獲取成功的時候再改變即可,加載動畫代碼如下。
<view class="loader" wx:if="{{isLoader}}"> <view class="dot"></view> <view class="dot"></view> <view class="dot"></view> <view class="dot"></view> <view class="dot"></view> </view>
.dot { width: 24rpx; height: 24rpx; background: #3ac; border-radius: 100%; display: inline-block; animation: slide 1s infinite; } .dot:nth-child(n) { animation-delay: 0.1s; background: #6cd793; } @keyframes slide { 0% { transform: scale(1); } 50% { opacity: .3; transform: scale(2); } 100% { transform: scale(1); } }
觸底加載的優(yōu)點
在小程序中如果數(shù)據(jù)量過大,一次性獲取會加重dom渲染的負擔(dān),不僅如此,響應(yīng)的速度也會如龜速一樣,所以為了用戶的體驗,良好的響應(yīng)式交互是必要的,通過觸底交互,按量加載數(shù)據(jù),如下,我每次觸底會加載八份數(shù)據(jù),然后直到所有數(shù)據(jù)加載完畢,為空。
下拉刷新
小程序下拉刷新頁面實現(xiàn)還是很容易的
在相應(yīng)頁面的同級json文件中配置一下
enablePullDownRefresh
使其為true
,這里是開啟對應(yīng)頁面的下拉刷新設(shè)置{ "usingComponents": {}, "enablePullDownRefresh": true, }
使用
onPullDownRefresh
監(jiān)聽用戶下拉動作onPullDownRefresh: function () {},
調(diào)用wx的加載api
onPullDownRefresh: function () { console.log(1) //在標(biāo)題欄中顯示加載 wx.showNavigationBarLoading() wx.showLoading({ title: '刷新中...', }) wx.cloud.database().collection('books').skip(0).limit(6).get().then(res => { this.setData({ books: res.data }) wx.hideLoading(); //隱藏導(dǎo)航條加載動畫 wx.hideNavigationBarLoading(); //停止下拉刷新 wx.stopPullDownRefresh(); }) },
具體api相關(guān)介紹如下:
wx.showNavigationBarLoading()
在導(dǎo)航條進行顯示加載動畫wx.hideNavigationBarLoading()
隱藏導(dǎo)航條加載動畫wx.stopPullDownRefresh()
停止下拉刷新
最后
到此這篇關(guān)于微信小程序?qū)崿F(xiàn)觸底加載與下拉刷新的示例代碼的文章就介紹到這了,更多相關(guān)小程序觸底加載與下拉刷新內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 微信小程序?qū)崿F(xiàn)上拉加載功能示例【加載更多數(shù)據(jù)/觸底加載/點擊加載更多數(shù)據(jù)】
- 微信小程序 列表的上拉加載和下拉刷新的實現(xiàn)
- 微信小程序 詳解下拉加載與上拉刷新實現(xiàn)方法
- 微信小程序下拉加載和上拉刷新兩種實現(xiàn)方法詳解
- 微信小程序 scroll-view實現(xiàn)上拉加載與下拉刷新的實例
- 微信小程序?qū)崿F(xiàn)列表下拉刷新上拉加載
- 微信小程序(六):列表上拉加載下拉刷新示例
- 詳解微信小程序開發(fā)之下拉刷新 上拉加載
- 微信小程序列表渲染功能之列表下拉刷新及上拉加載的實現(xiàn)方法分析
- 微信小程序?qū)崿F(xiàn)觸底加載
相關(guān)文章
Javascript實現(xiàn)可旋轉(zhuǎn)的圓圈實例代碼
這篇文章主要介紹了Javascript實現(xiàn)可旋轉(zhuǎn)的圓圈實例代碼,可實現(xiàn)圓圈的旋轉(zhuǎn)與運動效果,涉及javascript動態(tài)操作頁面元素屬性及進行相應(yīng)數(shù)學(xué)運算的技巧,需要的朋友可以參考下2015-08-08學(xué)習(xí)JavaScript中的閉包closure應(yīng)該注意什么
這篇文章主要介紹了學(xué)習(xí)JavaScript中的閉包closure應(yīng)該注意什么?在?JavaScript?中,?每當(dāng)創(chuàng)建一個函數(shù),?閉包就會在函數(shù)創(chuàng)建的同時被創(chuàng)建出來,但是學(xué)習(xí)的時候我們應(yīng)該注意哪些問題呢,帶著疑問一起進入下面文章學(xué)習(xí)具體內(nèi)容吧2022-06-06微信小程序?qū)崿F(xiàn)自定義動畫彈框/提示框的方法實例
這篇文章主要給大家介紹了關(guān)于微信小程序?qū)崿F(xiàn)自定義動畫彈框/提示框的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11Javascript(es2016) import和require用法和區(qū)別詳解
本篇文章主要介紹了Javascript(es2016) import和require用法和區(qū)別詳解,具有一定的參考價值,有興趣的可以了解下2017-08-08js實現(xiàn)的光標(biāo)位置工具函數(shù)示例
這篇文章主要介紹了js實現(xiàn)的光標(biāo)位置工具函數(shù),結(jié)合實例形式分析了JavaScript操作textarea文本框光標(biāo)位置及文本操作相關(guān)技巧,需要的朋友可以參考下2016-10-10