uni-app上拉加载事件

本文详细介绍了uni-app中实现上拉加载功能的步骤和技巧,从监听滚动事件到设置下拉刷新和上拉加载的配置,再到数据加载与列表渲染的实现,帮助开发者优化用户体验,提升应用性能。
import uniLoadMore from "@/components/uni-load-more/uni-load-more.vue"
export default {
		components: {
		   uniLoadMore,
		},
			data() {
			return {
				status: 'more',
				currentPage:1,
				totalPages :0,
				statusTypes: [{
					value: 'more',
					text: '加载前'
				}, {
					value: 'loading',
					text: '正在加载..'
				}, {
					value: 'noMore',
					text: '没有更多'
				}],
				contentText: {
					contentdown: '亲~到最后一页啦!',
					contentrefresh: '加载中',
					contentnomore: '没有更多'
				},
			};
		},
	// 上拉加载
	onReachBottom() {
		var that = this
		this.status = 'loading'
		uni.showNavigationBarLoading()
		 setTimeout(function() {
			that.status = 'more'
			uni.hideNavigationBarLoading()
	        if(that.totalPages > that.currentPage){
	            that.currentPage = that.currentPage + 1 ;
	             that.getCarList();   //刷新页面
				 //回到页面顶部
				 uni.pageScrollTo({
				 	scrollTop: 0,
				 	duration: 0
				 	})
	        }else{
				that.currentPage = that.totalPages ;
	            this.status='noMore';
				uni.hideNavigationBarLoading()
	        }
		 }, 1000);
	},
### 实现上拉加载更多和下拉刷新 #### 启用下拉刷新功能 为了启用页面的下拉刷新,在 `pages.json` 文件中的对应页面配置项内设置 `enablePullDownRefresh: true` 属性[^2]。 ```json { "path": "pages/index/index", "style": { "enablePullDownRefresh": true } } ``` #### 定义下拉刷新逻辑 在 Vue 组件中定义 `onPullDownRefresh()` 方法用于响应用户的下拉操作。当检测到用户执行了下拉动作,则触发此方法更新数据并最终通过调用 `uni.stopPullDownRefresh()` 来结束刷新状态[^3]。 ```javascript export default { methods: { onPullDownRefresh() { console.log('正在刷新...'); // 模拟网络请求延迟 setTimeout(() => { // 更新界面显示的数据... // 停止刷新动画 uni.stopPullDownRefresh(); }, 1000); } }, onLoad() { // 页面初次加载时启动一次刷新 uni.startPullDownRefresh(); }, onShow() { // 返回页面时可选择再次启动刷新 uni.startPullDownRefresh(); } } ``` #### 上拉加载更多的实现方式 对于上拉加载更多,通常是在列表底部添加一个组件来提示用户可以继续滚动以获取更多信息。每当用户接近屏幕底端时便自动发起新的 API 请求追加新项目至现有列表之中[^4]。 创建一个新的自定义组件 `components/uni-load-more/uni-load-more.vue`: ```html <template> <view class="load-more"> {{ loadingText }} </view> </template> <script> export default { props: ['loading'], computed: { loadingText() { switch (this.loading) { case 'more': return '点击或上拉加载更多'; case 'loading': return '努力加载中...'; case 'noMore': return '没有更多啦~'; default: return ''; } } } }; </script> <style scoped> .load-more { padding-top: 15px; padding-bottom: 15px; text-align: center; color: #9e9e9e; } </style> ``` 接着修改父级页面文件引入这个组件,并根据实际情况调整其属性值控制展示文案以及是否处于加载状态。 ```vue <template> <scroll-view scroll-y @scrolltolower="handleScrollToLower"> <!-- 列表内容 --> <!-- 加载指示器 --> <uni-load-more :loading="loadingStatus"></uni-load-more> </scroll-view> </template> <script> import UniLoadMore from '@/components/uni-load-more/uni-load-more'; export default { components: { UniLoadMore }, data() { return { listData: [], // 存储列表项目的数组 loadingStatus: 'more', // 控制加载更多组件的状态 pageIndex: 1 // 记录当前页码数,默认第一页 }; }, methods: { handleScrollToLower() { this.loadingStatus = 'loading'; // 设置为加载中 // 这里应该放置实际的异步加载业务逻辑 setTimeout(() => { const newData = Array.from({ length: 10 }).map((_, i) => ({ id: `${pageIndex}-${i}`, name: `Item ${pageIndex * 10 + i}` }) ); this.listData.push(...newData); if (/* 数据已全部加载完毕 */) { this.loadingStatus = 'noMore'; } else { ++this.pageIndex; // 翻页准备下次加载 this.loadingStatus = 'more';// 恢复等待状态 } }, 1000); // 模仿网络延时效果 } } }; </script> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值