uni-app(9)— 下拉刷新以及关闭下拉刷新,上拉加载(页面触底)

本文详细介绍了uni-app中如何实现下拉刷新和上拉加载(页面触底)功能。通过配置文件开启下拉刷新,定义onPullDownRefresh监听刷新动作,使用uni.stopPullDownRefresh关闭刷新,结合onReachBottom监听页面触底行为,实现内容的动态加载。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

此文为uni-app总结笔记(9)— 下拉刷新以及关闭下拉刷新,上拉加载(页面触底)

下拉刷新
开启下拉刷新

在uni-app中有三种方式开启下拉刷新

  • 方法一: 需要在 pages.json 里,找到的当前页面的pages节点,并在 style 选项中开启 enablePullDownRefresh
  • 方法二: 在 js 中定义 onPullDownRefresh 处理函数(和onLoad等生命周期函数同级),监听该页面用户下拉刷新事件。
  • 方法三: 通过调用uni.startPullDownRefresh方法来开启下拉刷新

开启下拉刷新方法一:

通过配置文件开启

创建list页面进行演示

<template>
	<view>
		<view v-for="(item,index) in arr" :key="index">
			{{item}}
		</view>
	</view>
</template>

<script>
	export default {
		data () {
			return {
				arr: ['前端','java','ui','大数据']
			}
		}
	}
</script>

<style>
</style>

通过pages.json文件中找到当前页面的pages节点,并在 style 选项中开启 enablePullDownRefresh

{
  "path":"pages/list/list",
    "style":{
      "enablePullDownRefresh": true
    }
}

方法二: 在 js 中定义 onPullDownRefresh 处理函数

api文档

监听下拉刷新

通过onPullDownRefresh可以监听到下拉刷新的动作,并对数组内容进行更改

<template>
	<view>
		<view>这是列表页</view>
		<view class="box-item" v-for="item in list" :key="item">
			{{item}}
		</view>
	</view>
</template>
<script>
	export default {
	  data () {
	    return {
	      arr: ["前端","后端","JAVA","UI",]
	    }
	  },
	  onPullDownRefresh () {
	    console.log('触发下拉刷新了'),
	    this.list = ["JAVA","UI","前端","后端"]
	  }
	}
</script>

效果展示:
页面开始时:
在这里插入图片描述
下拉刷新并更改数组内容效果展示:
在这里插入图片描述
方便展示也可在 onPullDownRefresh 方法里面增加计时器,代码如下:

export default {
  data () {
    return {
      arr: ["前端","后端","JAVA","UI",]
    }
  },
  onPullDownRefresh () {
    console.log('触发下拉刷新了'),
    setTimeout(()=>{
		this.list = ["JAVA","UI","前端","后端"]
	},2000)
  }
}
关闭下拉刷新

uni.stopPullDownRefresh()

停止当前页面下拉刷新。

案例演示

<template>
	<view>
		<view>这是列表页</view>
		<view class="box-item" v-for="item in list" :key="item">
			{{item}}
		</view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				list: ["前端","后端","JAVA","UI"]
			}
		},
		onPullDownRefresh() {
			console.log("触发了下拉刷新"),
			setTimeout(()=>{
				this.list = ["JAVA","UI","前端","后端"],
				uni.stopPullDownRefresh()
			},2000)
		},
	}
</script>

<style>
	.box-item {
		height: 50px;
		line-height: 50px;
	}
</style>

方法三: 通过调用uni.startPullDownRefresh方法来开启下拉刷新

在刚刚的代码里面加入 button , 新增方法,点击按钮触发下拉刷新即可。

示例代码:

	<template>
	<view>
		<view>这是列表页</view>
		<view class="box-item" v-for="item in list" :key="item">
			{{item}}
		</view>
		<button @click="pullResh">下拉刷新</button>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				list: ["前端","后端","JAVA","UI"]
			}
		},
		onPullDownRefresh() {
			console.log("触发了下拉刷新"),
			setTimeout(()=>{
				this.list = ["JAVA","UI","前端","后端"],
				uni.stopPullDownRefresh()
			},2000)
		},
		methods: {
			pullResh() {
				uni.startPullDownRefresh()
			}
		}
	}
</script>

<style>
	.box-item {
		height: 50px;
		line-height: 50px;
	}
</style>

效果图:
在这里插入图片描述

点击 下拉刷新 按钮触发示例图:
在这里插入图片描述

上拉加载(页面触底) API文档

通过在pages.json文件中找到当前页面的pages节点下style中配置onReachBottomDistance可以设置距离底部开启加载的距离,默认为50px

在这里插入图片描述

通过onReachBottom监听到触底的行为

示例代码:

<template>
	<view>
		<view>这是列表页</view>
		<view class="box-item" v-for="item in list" :key="item">
			{{item}}
		</view>
		<button @click="pullResh">下拉刷新</button>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				list: ["前端","后端","JAVA","UI"]
			}
		},
		onPullDownRefresh() {
			console.log("触发了下拉刷新"),
			setTimeout(()=>{
				this.list = ["JAVA","UI","前端","后端"],
				uni.stopPullDownRefresh()
			},2000)
		},
		methods: {
			pullResh() {
				uni.startPullDownRefresh()
			}
		},
		onReachBottom() {
			console.log("下拉到底了")
			this.list = [...this.list,...["111","JAVA","UI","前端","后端"]]
		},
	}
</script>

<style>
	.box-item {
		height: 200px;
		line-height: 200px;
	}
</style>

### uni-app 中实现下拉触底加载更多功能 在 `uni-app` 开发环境中,可以通过组合使用 `onPullDownRefresh()` 和 `onReachBottom()` 生命周期函数来分别处理下拉刷新和上滑触底加载更多的逻辑。 #### 下拉刷新 当用户执行下拉操作时会触发此事件,在该回调内可以发起网络请求获取最新数据并更新视图。需要注意的是调用结束之后要记得停止刷新动画以提示用户操作完成: ```javascript // pages/index/index.vue export default { methods: { onPullDownRefresh() { console.log(&#39;正在刷新...&#39;); // 模拟异步请求过程 setTimeout(() => { // 更新界面显示的数据 // 停止刷新状态 uni.stopPullDownRefresh(); console.log(&#39;刷新完毕&#39;); }, 2000); } } } ``` #### 上滑触底加载更多 随着用户的不断向上滚动页面直到最底部,则会激活这个钩子函数用于追加新一批次的内容展示给访问者查看: ```javascript // 继续上面的例子 methods: { ..., onReachBottom() { console.log(&#39;已到达底部&#39;); // 这里可以根据实际情况调整参数或条件判断是否还有更多可加载项 // 同样模拟一次延迟后的响应作为新增记录加入现有列表之中 setTimeout(() => { const newData = Array.from({ length: 10 }).map((_, i) => ({ id: this.data.length + i, content: &#39;这是第&#39; + (this.data.length + i + 1) + &#39;条消息&#39;}) ); this.setData({ data: [...this.data, ...newData] }); console.log(`${newData.length} 条新纪录被成功添加`); }, 1500); // 如果没有更多数据则应告知用户已经全部加载完毕 } }, data() { return { data: [] // 初始为空数组等待后续填充 }; } ``` 上述代码片段展示了如何利用这两个 API 完成基本的交互体验设计[^1]。对于更复杂的应用场景可能还需要考虑诸如防抖动机制防止频繁触发等问题优化用户体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值