下拉刷新和上拉加载是两个独立又联系的功能,下拉刷新除了重新请求服务器数据外还要对之前的状态和页码进行初始化,而上拉加载需要服务器端有分页机制,和内存中数据的添加和页码的对应变化,以及状态的变化。
小程序对下拉刷新是有一定支持的,那就是json文件里的enablePullDownRefresh参数,设置enablePullDownRefresh后会触发js文件中的onPullDownRefresh方法,你可以在里面做要做的事情,比如对页面的初始化,对数据列表的清空等,初始化数据后,记得最后执行一次wx.stopPullDownRefresh(),将下拉关闭,否则那些小点点是不会消失的。
tips:下拉刷新的样式在一定程度上也可以通过backgroundColor和backgroundTextStyle改变。由于enablePullDownRefresh默认为false ,这里enablePullDownRefresh=true设置后才会触发onPullDownRefresh方法,还有模拟器测试的时候需要按住页面后下拉,才会看到刷新提示
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh: function () {
console.log("下拉刷新")
let that = this;
that.setData({
pageIndex: 0, // 每次触发下拉事件pageIndex=0
})
that.gainLoadingListData()
},
/**
* 初始化数据或是下拉刷新数据
*/
gainLoadingListData:function() {
let that = this;
let pageIndex = that.data.pageIndex;
let userCode = that.data.userCode;
console.log("pageIndex == ", pageIndex);
networking.gainData(userCode, pageIndex, function (data) {
wx.stopPullDownRefresh(); // 数据请求成功后,停止刷新
var array = data;
that.setData({
array: array,
})
}, function (message) {
console.log("message=", message)
})
},
上拉加载,获取更多数据主要利用了js中的onReachBottom方法,它表示“页面上拉触底事件的处理函数”,我们就在这时请求服务器获取新的数据并且添加到现有数据下面。
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function () {
console.log("上拉加载")
let that = this;
that.setData({
loading: true, //把"上拉加载"的变量设为false,显示
pageIndex: that.data.pageIndex + 5
})
// 上拉获取更多数据
this.gainMoreLoadingListData()
},
/**
* 上拉获取更多数据
*/
gainMoreLoadingListData: function () {
let that = this;
let pageIndex = that.data.pageIndex;
let userCode = that.data.userCode;
console.log("pageIndex == ", pageIndex);
networking.gainData(userCode, pageIndex, function (data) {
if (data.length != 0) { // 数组不为空
var array = that.data.array.concat(data);
for (var index in array) {
var date = new Date(array[index].orderTime)
var y = date.getFullYear();
var m = (date.getMonth() + 1);
var d = date.getDate();
var h = date.getHours();
var mm = date.getMinutes();
m = m > 9 ? m : '0' + m;
d = d > 9 ? d : '0' + d;
// h = h > 9 ? h : '0' + h;
// mm = mm > 9 ? mm : '0' + mm;
var dateStr = [y, m, d,].join('-');
// var timeStr = [h, mm].join(':')
// var format = dateStr + " " + timeStr;
var format = dateStr
array[index].orderTime = format;
}
that.setData({
array: array,
loading: true, //把"上拉加载"的变量设为false,显示
})
} else { // 数组为空
that.setData({
loading: false, //把"上拉加载"的变量设为true,隐藏
loaded: true, //把"上拉加载完成"的变量设为false,显示
})
}
}, function (message) {
console.log("message=", message)
})
},
具体实现可以参考我的GitHub 上的代码。其中实现了两种方式加载,一种是下拉刷新和上拉加载结合,一种是单独的上拉加载