Vue3.0 div随内容滚动到底部

背景

在做项目的时候,遇到一个需求往DIV添加内容的时候,需要将滚动条随内容滚动到底部,类似微信的聊天窗口那样,增强用户的体验感。在这里我利用了scrollTop = scrollHeight来实现我的想法。不过有几点需要注意的:
● vue利用的是虚拟dom来更新节点,再我每次添加内容的时候,获取到的dom都不是最新的。
● 用nextTick延迟回调,拿到最新dom?(试过没效果)
● 最后利用setTimeout来异步延迟拿到最新的DOM节点。

代码

<script setup lang="ts">
  // .........忽略其它代码
  let scrollRef = ref(null);
  const onSubmit = () => {
    // await nextTick();
    setTimeout(() => {
      console.log('内容增加时', scrollRef.value.scrollHeight);
      scrollRef.value.scrollTop = scrollRef.value.scrollHeight;
    }, 20); // 注意这里需要延迟20ms正好可以获取到更新后的dom节点
  };
  // 以下为测试
  onBeforeUpdate(() => {
    console.log('更新前', scrollRef.value.scrollHeight);
  });
  onUpdated(() => {
    console.log('更新后', scrollRef.value.scrollHeight);
  });
</script>

<template>
  <!--  ...忽略其他代码    -->
  <div class="body-container scrollbar" ref="scrollRef">
    <!--  ...忽略其他代码    -->
  </div>
</template>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值