【uniapp】scroll-view 实现自动滚动到最底部

在做uniapp项目中,有个滚动视图组件scroll-view,跟微信小程序里的组件一样的,想要实现自动滚动到最底部,是一件容易忽略的,小事情。

问题呈现

官网uniapp文档上说可以控制滚动条,并没有自动滚动到底部的设置选项,请看布局源代码,如下,大多数可能都是这样写的

<template>
	<view>
		<scroll-view class="scroll-view" :style="{height:scrollViewHeight+'px'}" :scroll-y="true" :scroll-top="scrollTop" :scroll-with-animation="true">
				<block v-for="(item,index) in images" :key="index">
					<image class="item" :src="item.src" mode="aspectFill"></image>
				</block>
		</scroll-view>
	</view>
</template>
<script>
	export default {
		data() {
			return {
				images:[],
				scrollTop:0,//滚动条位置
				scrollViewHeight:300,//滚动视图的高度
				//...
			};
		},
		//...
	}
</script>

🤔 虽然可以控制滚动条位置,但是,不知道滚动视图框内的内容高度,要怎么精准控制滚动条位置呢

解决方案

通过各种尝试,认为最好的方案就是,在滚动视图组件内再加一层view视图,布局改动后,源代码如下

<template>
	<view>
		<scroll-view class="scroll-view" :style="{height:scrollViewHeight+'px'}" :scroll-y="true" :scroll-top="scrollTop" :scroll-with-animation="true">
			<view id="scroll-view-content">
				<block v-for="(item,index) in images" :key="index">
					<image class="item" :src="item.src" mode="aspectFill"></image>
				</block>
			</view>
		</scroll-view>
	</view>
</template>
<script>
	//此处省略...
</script>

还有,实现滚动底部的处理方法scrollToBottom(),代码如下

export default {
	data() {
		return {
			images:[],
			scrollTop:0,//滚动条位置
			scrollViewHeight:300,//滚动视图的高度
			//...
		};
	},
	mounted() {
		let i = 10;
		do{
			this.images.push({
				src:'../../static/test.jpg',
				//...
			});
			i--;
		}while(i>0);
	},
	//...
	methods:{
		scrollToBottom(){
			this.$nextTick(()=>{
				uni.createSelectorQuery().in(this).select('#scroll-view-content').boundingClientRect((res)=>{
					let top = res.height-this.scrollViewHeight;
					if(top>0){
						this.scrollTop=top;
					}
				}).exec()
			})
		}
	}
}

注意事项

需要注意组件scroll-view的属性设置

  • 需要设置固定高度,这样视图里面内容当只有超过该高度才会有滚动效果
  • 需要设置scroll-with-animation=true,可以出现慢慢滚动到底部效果

在这里插入图片描述

  • 42
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论
实现 `scroll-view` 的自动滚动,可以使用 `setInterval` 方法和 `scroll-view` 的 `scroll-top` 属性。具体实现方法如下: 1. 在 `scroll-view` 标签中添加 `scroll-top="{{scrollTop}}"` 属性,用于绑定滚动条的位置。 2. 在 `data` 中定义 `scrollTop` 和 `intervalId` 变量,分别用于存储滚动条的位置和定时器的 ID。 3. 在 `onLoad` 生命周期函数中,调用 `setInterval` 方法,设置定时器每隔一段时间执行一次滚动操作。 4. 在定时器中,先判断当前滚动条的位置是否已经到达底部,如果到达底部则将滚动条位置设置为 0,否则将滚动条位置加上一个适当的值,使其向下滚动。 下面是实现代码示例: ```html <scroll-view scroll-y="true" scroll-top="{{scrollTop}}"> <!-- 内容区域 --> </scroll-view> ``` ```js Page({ data: { scrollTop: 0, // 滚动条位置 intervalId: null // 定时器 ID }, onLoad: function() { // 开启定时器,每隔 3 秒执行一次滚动操作 this.data.intervalId = setInterval(() => { // 判断当前是否到达底部 wx.createSelectorQuery().select('.scroll-view').boundingClientRect((rect) => { if (rect.bottom <= wx.getSystemInfoSync().screenHeight) { this.setData({ scrollTop: 0 }); } else { // 每次滚动 20px this.setData({ scrollTop: this.data.scrollTop + 20 }); } }).exec(); }, 3000); }, onUnload: function() { // 清除定时器 clearInterval(this.data.intervalId); } }); ``` 在上面的代码中,通过 `wx.createSelectorQuery().select('.scroll-view').boundingClientRect((rect) => {...})` 获取 `scroll-view` 的位置信息,判断是否到达底部。如果到达底部,则将滚动条位置设置为 0;否则将滚动条位置加上一个适当的值,使其向下滚动。在页面销毁时,清除定时器,避免内存泄漏。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TA远方

谢谢!收到你的爱╮(╯▽╰)╭

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值