uni-app 上拉加载函数 onReachBottom 不触发

记一次问题解决记录。

问题:uni-app 上拉加载函数不触发。

首先我已经在 pages.json 文件中配置了 enablePullDownRefresh 为 true,且配置正确。

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

查资料之后,有一种说法是 onReachBottomDistance 这个值的设置太小,会导致不触发函数,建议设置为 150。onReachBottomDistance 官网的解释是:页面上拉触底事件触发时距页面底部距离。

"globalStyle": {
	"navigationStyle": "custom",
	"backgroundColor": "#f2f2f2",
	"onReachBottomDistance": 150
},

可是配置之后,依然没有解决问题。

仔细思考后,问了自己一个问题,我的页面是否真的发生了滚动。检查代码发现,症结果然在此。

项目搭建初期,我封装了一个页面布局组件,用来统一管理页面布局。组件非常简单,将页面分为了 header 和 body 两部分。

<template>
	<view>
		<m-header class="m-header"></m-header>
		<view class="m-body">
			<slot></slot>
		</view>
	</view>	
</template>

样式设置如下:

.m-body{
	box-sizing: border-box;
	position: absolute;
	overflow-y: auto;
	left: 0;
	right:0;
	top:0;
	bottom:0;
	z-index: 0;
	background: #f2f2f2
}
.m-header ~ .m-body{
	top: 44px
}

问题就出在 m-body 样式的设置上。可以看出,通过设置 position:absolute,并且 top,bottom,left,right 都设置为零时,可以让页面平铺整个页面,所有的内容都是在 m-body 里做展示,即使里边的内容出现滚动,也是在 m-body 里边滚动,m-body 本身并没有发生任何滚动,所以不能触发上拉加载函数。

解决方案:

.m-body{
	  box-sizing: border-box;
	  min-height: 100vh;
	  background: #f2f2f2
}
.m-header ~ .m-body{
	padding-top: 44px;
}

至此,问题解决。

 

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
uni-app中,上更多是一种见的交互方式,用于在列表或页面中更多的数据。下面是一种实现上更多的方法: 1. 首先,在你的页面或组件中,需要监听页面滚动事件,以便判断用户是否已经滚动到了页面底部。 2. 当用户滚动到页面底部时,触发一个更多的函数。 3. 在更多的函数中,可以发送异步请求获取更多的数据。 4. 获取到数据后,将新数据追到原有的数据列表中。 5. 更新页面的数据绑定,使页面能够展示新的数据。 下面是一个示例代码: ```html <template> <view> <!-- 列表展示数据 --> <view v-for="(item, index) in dataList" :key="index">{{ item }}</view> <!-- 更多提示 --> <view v-if="loading">中...</view> </view> </template> <script> export default { data() { return { dataList: [], // 存储数据列表 loading: false, // 是否正在更多 page: 1, // 当前页码 pageSize: 10, // 每页数据数量 }; }, mounted() { // 监听页面滚动事件 uni.pageScrollTo({ scrollTop: 0, duration: 0, }); uni.onPageScroll(this.handlePageScroll); }, destroyed() { // 取消监听页面滚动事件 uni.offPageScroll(this.handlePageScroll); }, methods: { handlePageScroll(e) { // 判断是否滚动到页面底部 const { scrollTop, scrollHeight, windowHeight } = e; if (scrollTop + windowHeight >= scrollHeight) { this.loadMore(); } }, loadMore() { // 正在中,避免重复触发 if (this.loading) return; this.loading = true; // 发送异步请求获取更多数据 uni.request({ url: 'your-api-url', data: { page: this.page, pageSize: this.pageSize, }, success: (res) => { // 获取到新数据 const newData = res.data; // 将新数据追到原有数据列表中 this.dataList = this.dataList.concat(newData); // 更新页码 this.page++; // 完成,重置loading状态 this.loading = false; }, fail: (err) => { console.error(err); // 失败,重置loading状态 this.loading = false; }, }); }, }, }; </script> ``` 这是一个简单的示例,你可以根据自己的实际需求进行修改和扩展。希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值