知識
不管是網(wǎng)站,軟件還是小程序,都要直接或間接能為您產(chǎn)生價值,我們在追求其視覺表現(xiàn)的同時,更側(cè)重于功能的便捷,營銷的便利,運營的高效,讓網(wǎng)站成為營銷工具,讓軟件能切實提升企業(yè)內(nèi)部管理水平和效率。優(yōu)秀的程序為后期升級提供便捷的支持!
小程序的下拉刷新和觸底追加內(nèi)容
發(fā)表時間:2021-1-5
發(fā)布人:葵宇科技
瀏覽次數(shù):76
本方法是利用頁面事件處理函數(shù)的 onPullDownRefresh 和 onReachBottom 方法實現(xiàn)小程序的下拉刷新和觸底追加內(nèi)容。
前提條件:
需要在app.json的window選項中或頁面配置中開啟enablePullDownRefresh。
屬性 | 類型 | 描述 |
---|---|---|
enablePullDownRefresh | Boolean | 是否開啟下拉刷新,詳見頁面相關事件處理函數(shù)。 |
// 這里是index.json 這里我選擇在頁面配置中開啟,請?zhí)砑右韵抡Z句
{ "enablePullDownRefresh": true}
復制代碼
了解2個函數(shù):
方法 | 類型 | 描述 |
---|---|---|
onPullDownRefresh() | function | 頁面相關事件處理函數(shù)——監(jiān)聽用戶下拉動作 當處理完數(shù)據(jù)刷新后,wx.stopPullDownRefresh可以停止當前頁面的下拉刷新 |
onReachBottom() | function | 頁面上拉觸發(fā)底事件的處理函數(shù) 可以在app.json的window選項中或頁面配置中設置觸發(fā)距離onReachBottomDistance |
讓我們看看它到底是什么樣子,相信你已經(jīng)知道他們是如何觸發(fā)的吧
理一下思路:
要實現(xiàn)這個功能,先要知道在小程序開發(fā)中,頁面中的內(nèi)容是由數(shù)據(jù)驅(qū)動的,所以·····
復制代碼
一、數(shù)據(jù)
-
你可以自己在Page({ 模擬數(shù)據(jù) })
-
云開發(fā)=>數(shù)據(jù)庫=>創(chuàng)建一個新的集合 =>添加記錄=>愛添加什么鍵值對都可以
-
用接口去取得數(shù)據(jù)(這里先不具體說明)
二、頁面
就像上面說的那樣,數(shù)據(jù)驅(qū)動頁面,讓我們看看頁面中的是什么樣子的吧
// 這里是 index.wxml// 這里有些陌生的標簽,不要緊,我只是引入了vant weapp而已,
// 你用任何你喜歡的html標簽都可以實現(xiàn)
<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() // 創(chuàng)建一個database實例
const todos = db.collection("todos") // 取得數(shù)據(jù)庫中名為 "todos" 的集合
Page({
/*頁面的初始數(shù)據(jù)*/
data: {
tasks: [],
skip: 0
},
})
復制代碼
復制代碼 看到這里是不是有了疑問?
tasks是一個[ ] ,而它是空的,是如何變成下圖中的樣子?
skip 又是什么?
我們?nèi)〉玫膖odos,為什么還沒有出現(xiàn)?它本質(zhì)上它是一個對象 {} 只是這個花括號里有許多我們?nèi)M去的key 和 value
記住他們,我將接著和你解釋。
看 ! 并沒有什么復雜的東西 只是通過 wx:for"{{tasks}}"
循環(huán)遍歷tasks并渲染到<van-cell title="{{item.title}}"/ >而已。
它一條一條的出現(xiàn)在視圖中了。
復制代碼
如果你對Vue或者小程序有一些了解,那么你將看得懂這段代碼在說一件什么事。
三、探究如何實現(xiàn)?
下拉刷新和觸底追加內(nèi)容
// 這里是index.js
const db = wx.cloud.database() // 創(chuàng)建一個database實例
const todos = db.collection("todos") // 取得數(shù)據(jù)庫中名為 "todos" 的集合
Page({
/*頁面的初始數(shù)據(jù)*/
data: { // 一堆的代碼對于任何人來說都感到頭痛,所以跟著我注釋看吧~
tasks: [],
skip: 0
},
/****頁面相關事件處理函數(shù)--監(jiān)聽用戶下拉動作****/
onPullDownRefresh: function () {
this.getData(res => { // 這里只是調(diào)用了一個方法而已 接著注釋往下看它是什么
wx.stopPullDownRefresh()
//將skip和tasks重置到初始狀態(tài)。
this.data.skip = 0
this.data.tasks = []
})
},
/****頁面上拉觸底事件的處理函數(shù)****/
onReachBottom: function () { // 這里只是調(diào)用了一個方法而已 接著注釋往下看它是什么
// 顯示加載圖標
console.log("到底了")
this.getData(res => {})
},
/***********************getData是我自定義的函數(shù)***********************/
getData: function (callback) {
if (!callback) {
callback = res => {}
}
wx.showLoading({
title: '正在努力加載···',
})
// 這里以下才是重要的部分// 注意todos我們之前已經(jīng)得到它了
// 下面這串代碼告訴我們,取得todos中的數(shù)據(jù),每次它都會跳過this.data.skip條,每次都將數(shù)據(jù)通過
setData(),把tasks的值修改為 oldData和res.data拼接后的值。成功后將this.data.skip+20。
// 隨后你再看上面的代碼 他們都是在觸發(fā)條件的時候執(zhí)行了getData而已,再順帶附加了進行了一
些其他的操作
todos.skip(this.data.skip).get().then(res => {
// 用skip方法跳過已加載的部分 第一次跳過 0 條
let oldData = http://www.wxapp-union.com/this.data.tasks
this.setData({
// 將跳過的數(shù)據(jù) 和 新加載 的拼接成新數(shù)據(jù)并渲染頁面
tasks: oldData.concat(res.data)
}, res => {
// 每次加20 則上面的skip每次就跳過 前20條
this.data.skip += 20
wx.hideLoading({
success: (res) => {},
})
callback()
})
})
},
復制代碼
起始渲染20條,是小程序約定的公共值
總結一下
就是通過skip()方法,跳過已加載過的數(shù)據(jù),
每次觸底都將已加載的數(shù)據(jù)和接下來要加載的數(shù)據(jù)進行拼接,并賦值給要渲染的data。
每次刷新再重置data并重新加載頁面。
作者:raotao
鏈接:https://juejin.im/post/6880536175501803527
來源:掘金
著作權歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權,非商業(yè)轉(zhuǎn)載請注明出處。
相關案例查看更多
相關閱讀
- 云南網(wǎng)站建設服務公司
- 網(wǎng)絡公司哪家好
- 云南網(wǎng)站建設列表網(wǎng)
- 微分銷
- 云南小程序開發(fā)費用
- 報廢車拆解回收管理系統(tǒng)
- 汽車報廢拆解管理系統(tǒng)
- 網(wǎng)站搭建
- 北京小程序開發(fā)
- 小程序制作
- 報廢車管理
- 微信小程序
- 前端開發(fā)
- 網(wǎng)站開發(fā)
- 政府網(wǎng)站建設服務
- 日歷組件
- 云南網(wǎng)站建設首選
- 網(wǎng)站建設需要多少錢
- 汽車報廢管理系統(tǒng)
- 退款
- 云南網(wǎng)站制作哪家好
- 云南網(wǎng)站建設公司
- 云南網(wǎng)站建設靠譜公司
- 云南小程序被騙蔣軍
- web服務
- 網(wǎng)站建設首頁
- 網(wǎng)站建設制作
- 網(wǎng)站優(yōu)化哪家好
- 全國前十名小程序開發(fā)公司
- 智慧農(nóng)貿(mào)市場