头图

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


兔子先森
466 声望556 粉丝

致力于新技术的推广与优秀技术的普及。