外观
原生模式的下拉刷新与上拉加载
参考自官方:https://uniapp.dcloud.net.cn/api/ui/pulldown.html#onpulldownrefresh
演示代码
html
<template>
<page-refresh-x ref="pageRefresh" :currentIndex="currentTabIndex" :tabNum="2" :isLoading="isLoading" @getData="getData" :isEmpty="demoData.length == 0 ? true : false">
<view class="list-box">
<view class="item" v-for="(txt, index) in demoData" :key="index">
{{ index }} - {{ txt }}
</view>
</view>
</page-refresh-x>
</template>
<script>
// 模拟数据
var data = [1, 2, 3, 4, 5, 6, 7, 8];
// 模拟页码
// var pageNo = 1;
var pageSize = 10;
export default {
data() {
return {
currentTabIndex:0,
isLoading: false,
pageNo: [1, 1],
demoData: [],
};
},
computed: {},
methods: {
/**
* 数据加载函数
* @param {*} isReload 函数用于识别是不是下拉刷新执行的
*/
getData(isReload) {
if (isReload) {
pageNo = 1;
}
this.loadingStatus = true;
console.log("加载函数运行,页码 : " + pageNo);
// 模拟 api 请求刷新数据
setTimeout(() => {
// 对演示数据随机刷新模拟数据刷新
var demoArr = this.arrayShuffle(data);
console.log("list:" + demoArr.length);
if ( pageNo >= 2) {
this.demoData = this.demoData.concat(demoArr);
}
// 第一页 有可能是第一次加载或者刷新
else {
// 刷新时重置加载组件状态
this.demoData = [];
this.demoData = demoArr;
}
pageNo++;
//通知处理刷新加载结果
this.$refs.pageRefresh.reqFinish(
isReload,
pageSize,
pageNo,
demoArr.length
);
//多个tab页面时多传递一个tab索引值来区分不同的页面
if (this.pageNo[this.currentTabIndex] >= 2) {
this.demoData[this.currentTabIndex] =
this.demoData[this.currentTabIndex].concat(reqList);
}
// 第一页 有可能是第一次加载或者刷新
else {
// 刷新时重置加载组件状态
this.demoData[this.currentTabIndex] = [];
this.demoData[this.currentTabIndex] = reqList;
}
//通知处理刷新加载结果
this.$refs.pageRefresh.reqFinish(
isReload,
pageSize,
this.pageNo[this.currentTabIndex],
reqList.length,
this.currentTabIndex
);
this.pageNo[this.currentTabIndex]++;
this.isLoading = false;
this.$forceUpdate();
}, 1000);
},
// 数据随机
arrayShuffle(arr) {
let l = arr.length;
while (l) {
const i = Math.floor(Math.random() * l--);
[arr[l], arr[i]] = [arr[i], arr[l]];
}
return arr;
},
},
// 页面周期函数--监听页面加载
onLoad() {
// 页码加载时第一次加载数据
pageNo = 1;
this.getData();
},
// 页面处理函数--监听用户下拉动作
onPullDownRefresh() {
this.$refs.pageRefresh.pullDownRefresh();
},
// 页面处理函数--监听用户上拉触底
onReachBottom() {
this.$refs.pageRefresh.reachBottom();
}
};
</script>
<style scoped lang="scss">
.item {
background: rgb(168, 167, 168);
height: 200rpx;
margin-bottom: 20rpx;
}
</style>
H5自定义刷新样式
css
/* 刷新样式 */
uni-page-refresh .uni-page-refresh__icon {
fill: rgb(247, 32, 3) !important;
}
uni-page-refresh .uni-page-refresh__path {
stroke: rgb(247, 32, 3) !important;
}
注意事项
- 修改
pages.json
页面配置,开启下拉刷新:"enablePullDownRefresh": true
- 监听 onPullDownRefresh ( 下拉刷新 ) 事件
- 监听页面 onReachBottom 事件实现加载更多
Attributes
参数 | 说明 | 类型 | 默认值 |
---|---|---|---|
currentIndex | 多个tab刷新页面场景时,激活的tab 索引 | [Number, String] | 0 |
tabNum | 多个tab刷新页面场景时,tab的数量 | [Number, String] | 1 |
isLoading | 是否页面初始请求中 | Boolean | true |
isEmpty | 数据是否为空 | Boolean | true |
Event
事件 | 说明 |
---|---|
getData | 监听用户下拉、上拉触底动作时触发,触发事件时页面处理请求数据 |
method
方法 | 说明 |
---|---|
pullDownRefresh () | 下拉动作 |
reachBottom () | 用户上拉触底 |
reqFinish () | 请求结束后通知处理刷新加载结果 |
上次更新: