uni-app实现列表的上拉加载,下拉刷新、回到顶部功能

news/2024/7/10 0:28:55 标签: 列表, vue, android, 小程序, 前端

在使用uni-app做app和小程序时,经常会遇到一些列表,这个时候就需要列表能够实现上拉加载更多、下拉刷新的功能,具体效果如下:
上拉加载 下拉刷新
此功能比较简单,就不过多介绍了直上代码:

HTML部分
// 活动列表
	<view class="activityList">
	// 每一项活动(可替换)
		<view class="activityItem" v-for="(item,index) in activeList" :key='index'>
			<view class="top">
				<view class="user">
					<image :src="item.Photo ? $ImgUrl + item.Photo : baseUrl" mode="scaleToFill"></image>
					{{item.UserName}}
				</view>
				<view class="time">
					{{item.CreaTime}}
				</view>
			</view>	
		</view>
			// 加载提示信息
		<view class="loading">{{loadingType === 0 ? contentText.contentdown : (loadingType === 1 ? contentText.contentrefresh : contentText.contentnomore)}}</view>
	</view>
	
	<!-- 回到顶部 -->
	<view class="goTop" @click="goTop" :style="{'display':(flag===true? 'block':'none')}">
		<text class="iconfont icon-xiangshang"></text>  // iconfont icon-xiangshang  引入的阿里图标
	</view>
javascript部分
// 后台接口
import {
		StudentactivityList
	} from '../../api/activity.js'
export default {
		data() {
			return {
				flag: false,
				loadingType: 0,
				contentText: {
					contentdown: "上拉显示更多",
					contentrefresh: "正在加载...",
					contentnomore: "没有更多数据了"
				},
				params: {
					Page: 1,
					PageCount: 5
				},
				activeList: []
			}
		},
		onShow() {
			this.getList()
		},
		// 下拉刷新
		onPullDownRefresh() {
			this.params.Page = 1
			this.getList();
		},
		// 触底加载
		onReachBottom() {
			if (this.loadingType != 0) { //loadingType!=0;直接返回
				return false;
			}
			this.loadingType = 1;
			this.params.Page++; //每触底一次 page +1
			uni.showNavigationBarLoading(); //显示加载动画
			StudentactivityList(this.params).then(res => {
				this.activeList = [...this.activeList, ...res.data.list]
				this.typeConversion()
				this.loadingType = 0; //将loadingType归0重置
				uni.hideNavigationBarLoading(); //关闭加载动画
				if (this.params.Page == res.data.pages) { //没有数据
					this.loadingType = 2;
					uni.hideNavigationBarLoading(); //关闭加载动画
					return false;
				}
			}, res => {
			// 接口提示暂无数据
				this.loadingType = 2; //将loadingType归0重置
				uni.hideNavigationBarLoading(); //关闭加载动画
				uni.stopPullDownRefresh()
			})
		},
		methods: {
			// 获取列表
			getList() {
				this.loadingType = 1;
				uni.showNavigationBarLoading();
				StudentactivityList(this.params).then(res => {
					this.activeList = res.data.list
					this.typeConversion()
					uni.stopPullDownRefresh(); //得到数据后停止下拉刷新
					this.loadingType = 0;
					if (this.params.Page == res.data.pages) { //没有数据
						this.loadingType = 2;
						uni.hideNavigationBarLoading(); //关闭加载动画
						return false;
					}
				}, res => {
				// 接口提示暂无数据
					this.loadingType = 2; //将loadingType归0重置
					uni.hideNavigationBarLoading(); //关闭加载动画
					uni.stopPullDownRefresh()
					this.activeList = []
				})
			},
			//  回到顶部
			goTop() {
				uni.pageScrollTo({
					scrollTop: 0,
					duration: 300
				});

			},
			// 回到顶部显示
			onPageScroll(e) { //根据距离顶部距离是否显示回到顶部按钮
				if (e.scrollTop > 300) { //当距离大于600时显示回到顶部按钮
					this.flag = true
				} else { //当距离小于600时隐藏回到顶部按钮
					this.flag = false
				}
			},
		}
	}

css部分:

.goTop {
		width: 60rpx;
		height: 60rpx;
		border-radius: 50%;
		background-color: $uni-color-primary;
		text-align: center;
		line-height: 50rpx;
		position: fixed;
		bottom: 180rpx;
		right: 60rpx;

		text {
			color: #FFFFFF;
		}
	}
	.loading {
			text-align: center;
			line-height: 80px;
			font-size: 28rpx;
		}

样式部分只包含了回到顶部和加载文字,其他样式未复制,项目结束记录一下,如果各位大佬有更方便的解决办法也可以在评论里留下,互相学习进步
更多文章__> >> 码砖猿的技术博客


http://www.niftyadmin.cn/n/875706.html

相关文章

nodejs+nginx获取真实ip,解决获取ip为127.0.0.1的问题

nodejsnginx获取真实ip,解决获取ip为127.0.0.1的问题 访问互联网上的服务时&#xff0c;大多数时&#xff0c;客户端并不是直接访问到服务端的&#xff0c;而是客户端首先请求到反向代理&#xff0c;反向代理再转发到服务端实现服务访问&#xff0c;通过反向代理实现路由/负载…

react监听页面滚动事件:window.addEventListener的scroll无效

react监听页面滚动事件&#xff1a;window.addEventListener的scroll无效 在react项目中需要通过监听页面滚动高度&#xff0c;控制页面样式动态展示&#xff0c;所以在网上找了以后其他案例发现监听无效&#xff0c;代码如下&#xff1a; //在componentDidMount&#xff0c;…

基于vue的图片剪裁工具vue-croppe

基于vue的图片剪裁工具vue-croppe 安装 // npm安装 npm install --save vue-croppa // yarn 安装 yarn add vue-croppa使用 引入插件 两种引用方式 // 全局注册 main.js import VueCropper from vue-cropper Vue.use(VueCropper)// 组件内单独使用 userAvatar.vue import { …

vue实现一键复制

在个人项目中为了更好的完善体验&#xff0c;需要有一个一键复制的功能复制&#xff0c;主要的实现方法有以下几个&#xff1a; 不使用插件 使用input配合document.execComman方法可以实现&#xff1b; 这个特性已经过时了&#xff0c;它在一些浏览器中仍然可以工作&#xff…

基于element封装table、分页

在利用element-ui Table编写项目时,会存在表格展示的数据存在分页的情况,基本每个页面都要配置&#xff0c;很影响开发效率&#xff0c;也不利于后期维护&#xff0c;所以统一封装一下&#xff0c;便于开发使用。 How to Use: 在src/components目录中创建base-table&#xff0…

vue自定义音频audio样式及操作面板

简介 由于audio标签原生样式不能满足项目需要&#xff0c;需要自定义样式&#xff0c;项目使用技术为vue&#xff0c;将自定义audio封装为一个组件&#xff0c;可以在其他组件内进行引用,主要进行了以下修改&#xff1a; 1、隐藏原生audio标签 2、通过div实现自定义样式 3、控…

常见的数据埋点方式介绍

首先我们要先了解数据埋点&#xff0c;到底有什么用处&#xff1f; 1、对设计师而言 根据埋点统计出页面元素的点击&#xff0c;页面按钮的点击转化&#xff0c;有助于在后续中作进一步视觉调优。 2、对产品/运营/推广而言 可作为产品/运营/推广当次产品功能/运营活动/渠道推广…

arcgis js 移除某一个点_lax.js(scroll动画插件)介绍

本文是对github上开源项目laxxx的介绍,不到10天已有3500star。 传送门1. 简介laxxx是一款简单轻巧&#xff08;<2kb gzipped&#xff09;的javascript插件,当你滚动时创建流畅和美丽的动画的开源项目&#xff0c;通过监听scroll,使元素在页面上活跃起来。2. 初始化将lax.js导…