uniapp 上垃加载下拉刷新 mescroll

uniapp实现下拉刷新与上拉加载:mescroll实战
本文介绍了如何在uniapp中使用mescroll组件实现下拉刷新和上拉加载的功能,提供了组件的下载链接,并详细讲解了其集成和使用方法。

在这里插入图片描述

<template>
	<mescroll-uni :down="downOption" @down="downCallback" :up="upOption" @up="upCallback">
		<view class="list" v-for="(item,index) in dataList" :key="index">
			<view class="flex-wrap-nowrap">
				<view class="uni-font-30 color-black">
					获得静态收益 100.00 
				</view>
				<view class="margin-left-auto color-red font-weight-700">
					+100.00
				</view>
			</view>
			<view class="uni-font-26 color-gray" style="margin-top: 15rpx;">
				2019-07-24 18:54:28
			</view>
		</view>
	</mescroll-uni>
</template>
 
<script>
	import MescrollUni from "../../public/components/mescroll-uni/mescroll-uni.vue";
	
	export default {
		components: {
			MescrollUni
		},
		data() {
			return {
				// 配置下拉刷新数据
				downOption: {
					auto: false,
				},
				// 配置上拉加载数据
				upOption:{
					isBounce:true,
					textNoMore:'到底啦'
				},
				dataList: []
			}
		},
		methods: {
			/*下拉刷新的回调 */
			downCallback(mescroll) {
				// 下拉刷新的回调,默认重置上拉加载列表为第一页 (自动执行 mescroll.num=1, 再触发upCallback方法 )
				this.dataList = [];
				mescroll.resetUpScroll()  //重置上拉加载的数据
			},
			/*上拉加载的回调: mescroll携带page的参数, 其中num:当前页 从1开始, size:每页数据条数,默认10 */
			upCallback(mescroll) {
					console.log("mescroll.num=" + mescroll.num + ", mescroll.size=" + mescroll.size);								
					//mescroll.endSuccess(curPageData.length, hasNext); //必传参数(当前页的数据个数, 是否有下一页true/false)
					if(this.dataList.length <= 50){
						setTimeout(()=>{
							for(var i=0;i<10;i++){
								this.dataList.push(i)
							}
							mescroll.endSuccess(this.dataList.length);
							console.log("执行了上拉加载");
						},1000)						
					}else{
						//联网失败的回调,隐藏下拉刷新的状态
						mescroll.endErr();
						mescroll.endUpScroll(true);
						console.log("上拉加载完毕");
					}
					
					
			},
		}
	}
</script>
 
<style>
	.list{
		width: 100%;
		padding: 18rpx 3%;
		box-sizing: border-box;
		border-bottom: 1rpx solid #EFEFEF;
	}
</style>

组件下载地址mescroll

### 如何在 UniApp 中实现上拉刷新和下拉加载功能 #### 一、基础概念 在 UniApp 的开发中,`uni.startPullDownRefresh()` 是用于触发下拉刷新的核心 API[^1]。它能够模拟用户的下拉操作并启动刷新动画。与此同时,为了满足更复杂的应用场景需求,通常会结合第三方组件 `mescroll-uni` 来完成更加优雅的上下滑动交互体验[^3]。 #### 二、具体实现方式 ##### 方法一:原生 API 实现 利用 UniApp 提供的基础能力来构建简单的上拉加载下拉刷新逻辑: ```javascript // 页面初始化配置 export default { data() { return { listData: [], // 数据列表 page: 1, // 当前页码 pageSize: 10 // 每页大小 }; }, onReachBottom() { // 上拉触底事件 this.loadMore(); }, onPullDownRefresh() { // 下拉刷新事件 this.refreshList(); }, methods: { refreshList() { setTimeout(() => { this.page = 1; this.listData = []; this.fetchData(); // 调用接口获取新数据 uni.stopPullDownRefresh(); // 停止刷新状态 }, 1000); }, loadMore() { this.page++; this.fetchData(); }, fetchData() { let params = { page: this.page, size: this.pageSize }; // 模拟网络请求 setTimeout(() => { const newData = Array.from({ length: this.pageSize }).map((_, i) => `${this.page}-${i}` ); if (newData.length === 0) { console.log('没有更多数据'); return; } this.listData.push(...newData); // 将新的数据追加到已有数组后面 }, 500); } } }; ``` 上述代码展示了基于页面生命周期函数 `onReachBottom` 和 `onPullDownRefresh` 的基本处理流程[^4]。 ##### 方法二:借助 mescroll-uni 组件优化用户体验 对于更高阶的功能需求或者希望减少重复编码工作量的情况下,推荐引入专门设计好的滚动控件库 —— **Mescroll**。该工具不仅封装好了常见的分页机制还提供了丰富的定制选项使得开发者可以根据实际情况灵活调整样式表现形式以及性能参数设置等细节部分。 安装步骤如下所示: 1. 打开 HBuilderX 插件商店搜索关键字 “mescroll”,找到对应版本号点击安装按钮; 2. 成功之后可以在项目的 components 文件夹里面发现新增了一个叫做 'mescroll-uni' 的子目录结构; 接下来按照官方文档指引修改模板布局文件内容如下: ```html <template> <view class="content"> <!-- 配置 Mescroll ScrollView --> <mescroll-body ref="mescrollRef" @init="mescrollInit" :up="upOption" :down="downOption"> <block v-for="(item,index) in dataList" :key="index">{{ item }}</block> </mescroll-body> </view> </template> <script> import MescrollMixin from "@/components/mescroll-uni/mescroll-mixins.js"; export default { mixins:[MescrollMixin], // 使用混入模式集成核心业务逻辑 data(){ return{ dataList:[], downOption:{ auto:false // 是否自动执行第一次下拉动作,默认关闭防止不必要的资源消耗 }, upOption:{ use:true, // 启用上传模块开关标志位 page:{size:10}, // 初始化每一页显示条目数量限制条件 noMoreSize:5 // 如果剩余不足五项则提示已经到达底部尽头位置信息给用户查看 } } }, methods:{ async downCallback(mescroll){ try{ await new Promise(resolve=>setTimeout(resolve,1e3)); this.dataList=[]; this.upLoadData(mescroll,'reset'); }catch(err){} }, async upLoadData(mescroll,type='add'){ try{ let res=await fetch(`https://example.com/api?page=${type==='reset'?1:mescroll.num}&limit=${mescroll.size}`); let json=res.json(); if(type=='reset')this.dataList=json.results||[]; else this.dataList=[...this.dataList,...(json.results||[])]; mescroll.endSuccess(json.total||0); }catch(e){mescroll.endErr();} } } } </script> ``` 以上片段重点在于通过 Vue Mixin 技术简化了原本繁杂的手写控制流管理过程,并且充分利用异步编程优势进一步提升了程序可读性和维护便利程度。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值