赞
踩
上拉加载和下拉刷新是小程序开发的常见需求。本文将介绍如何在微信小程序中实现上拉加载和下拉刷新的功能,为用户带来更加流畅、便捷的使用体验。
微信小程序 上列表拉加载下拉刷新
(1) 首先需要在使用到的 json 文件下配置 “enablePullDownRefresh”: true
{
"usingComponents": {},
"enablePullDownRefresh": true,
}
(2) 在 js 文件中加上触底函数跟上拉函数
//触底函数
onReachBottom(){
console.log("上拉加载....");
},
//上拉函数
onPullDownRefresh(){
console.log("下拉刷新...");
},
(3) 请求接口,将新请求的数据通过 cancat 方法合并到 list 数组中,然后更新数据。 concat() 方法用于连接两个或多个数组
var dataList = that.data.dataList.concat(dataArr)
that.setData({
dataList: dataList
});
(4)对数据进行判断,如果列表数据条数小于总条数,隐藏 “正在加载” 字样,显示 “已加载全部” 字样
if (res.data.dataList.length < this.data.limit) {
that.setData({
loading: false,
loaded: true,
});
}
(5) 上拉加载时,改变文字状态,然后调用接口
let that = this;
if (!that.data.loading) {
that.setData({
loading: true,
loaded: false
});
}
setTimeout(function () {
that.getData();
}, 500)
(6)下拉刷新时,将页码重置为 1 然后再次调用接口即可,但是不要忘了刷新完成后要关闭刷新的操作:wx.hideNavigationBarLoading() 和 wx.stopPullDownRefresh() 。
this.data.list = []
wx.showNavigationBarLoading()
this.setData({
page: 1
});
this.licensePort();
setTimeout(function () {
wx.showToast({
title: '刷新成功',
icon: 'none',
duration: 1000
})
wx.hideNavigationBarLoading()
wx.stopPullDownRefresh()
}, 1000)
<!-- 内容 -->
<view class="navBox" wx:for="{{dataList}}" wx:key="index">
<view>
<text class="lableBox">区县</text><text>{{item}}</text>
</view>
</view>
<!-- 加载时文字 -->
<view class="bomTxt">
<view hidden="{{!loading}}">正在加载...</view>
<view hidden="{{!loaded}}">已加载全部</view>
</view>
page { background: #EFF4FF; } .navBox { margin: 2.5%; font-size: 14px; border-radius: 36rpx; background: white; } .lableBox { display: inline-block; width: 90px; text-align: right; margin-right: 30rpx; } .navBox view { padding: 24rpx 30rpx; } .navBox view:not(:last-child) { border-bottom: 1px solid rgb(235, 237, 239); } .bomTxt { display: flex; justify-content: center; font-size: 12px; color: rgb(126, 138, 155); padding: 0rpx 0rpx 20rpx 0rpx; }
{
"usingComponents": {},
"navigationBarBackgroundColor": "#6197FB",
"navigationBarTitleText": "列表刷新加载",
"enablePullDownRefresh": true,
"backgroundTextStyle": "light",
"backgroundColor": "#6197FB"
}
//获取应用实例 var app = getApp(); Page({ data: { pageNum: 1, //当前第几页 pageSize: 20, //一页展示几条 dataList: [], //所有数据 loading: false, //是否展示 “正在加载” 字样 loaded: false //是否展示 “已加载全部” 字样 }, onLoad: function (options) { var that=this that.getData(1, 20, 1); }, /** * 获取数据 */ getData(pageNum, pageSize, type) { var that = this; if (type == 1) { //刷新 that.setData({ pageNum: 1, pageSize: pageSize, dataList: [], }); setTimeout(function () { var dataArr = [] for (var i = 0; i < pageSize; i++) { dataArr.push(that.data.pageNum + '内容' + i); } var dataList = that.data.dataList.concat(dataArr) that.setData({ dataList: dataList }); wx.showToast({ title: '刷新成功', icon: 'none', duration: 1000 }) wx.hideNavigationBarLoading() //完成停止加载 wx.stopPullDownRefresh() //停止下拉刷新 if (dataList.length>0) { // 更新数据 that.setData({ dataList: dataList, loading: false, }); } else { that.setData({ loaded: true, //显示 “没有数据” 字样 loading: false //隐藏 “正在加载” 字样 }); } }, 2000); } else if (type == 2) { //加载 if (pageNum > 3) { wx.showToast({ title: '没有更多了', icon: 'success', duration: 1000 }) } else { wx.showLoading({ title: '加载中...', }); setTimeout(function () { for (var i = 0; i < pageSize; i++) { that.data.dataList.push( '内容' + i); } that.setData({ pageNum: pageNum, dataList: that.data.dataList }); wx.hideLoading(); }, 2000); } } }, /** * 上拉加载 */ onReachBottom() { const that = this; if (!that.data.loading) { that.setData({ loading: true, //加载中 loaded: false //是否加载完所有数据 }); } var pageNums = that.data.pageNum + 1; this.getData(pageNums, 20, 2); }, /** * 下拉刷新 */ onPullDownRefresh() { var that=this wx.showNavigationBarLoading() //在标题栏中显示加载圈圈 that.getData(1, 20, 1); } })
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。