scroll-into-view实现
很简单, 只需要设置锚点即可,每次发送滚动到最后一个锚点
<scroll-view scroll-y="true" :scroll-into-view="itemKey">
<view class="box">
<view v-for="item in list" :key="item.id" :id="'item' + item.id">
</view>
</view>
</scroll-view>
<view @click="onSend">发送</view>
onSend() {
this.itemKey = ""; // 先清除,否则相同的key不会触发锚点滚动
this.$nextTick(() => {
let last = this.list[this.list.length - 1]
this.itemKey = ('item' + last.id)
})
},
注意:scroll-into-view绑定的key不能以数字开头,所以这里在开头拼接了一个"item"字符串
scroll-top实现
你也可以使用scroll-top属性来实现,不过scroll-top需要计算滚动高度,可能复杂点
<scroll-view scroll-y="true" :scroll-top="scrollTop">
<view class="box" id="scroll-view-content">
<view v-for="item in list" :key="item.id">
</view>
</view>
</scroll-view>
<view @click="onSend">发送</view>
export default {
data() {
return {
scrollTop: 0
}
},
methods: {
onSend() {
this.scrollTop = 99999; // 设置一个最大值,滚动到底部
},
}
}
当然上面scrollTop设置最大值是一个示例,你需要获取滚动盒子的高度以及内部box的高度
export default {
data() {
return {
scrollTop: 0
}
},
methods: {
onSend() {
this.$nextTick(()=>{
uni.createSelectorQuery().in(this).select('#scroll-view-content').boundingClientRect((res)=>{
// res会返回当前元素的宽高
// 计算scrollTop = res.height - scroll-view的高度
// 最终返回的结果就是scrollTop最终的触底高度
}).exec()
})
},
}
}
参考文档:
scroll-into-view
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。