vue实现数据驱动滚动条底部显示

本文探讨了在Vue应用中如何实现实时数据更新,并解决数据更新后滚动条定位到最后一条数据的问题。作者通过设置定时器模拟后端数据更新,并在数据变化时触发滚动更新。然而,由于Vue的渲染延迟,导致滚动条停留在倒数第二条数据。解决方案是在`updated`钩子中处理滚动,同时提出当鼠标悬停在盒子上时采用鼠标滚动,鼠标离开时自动滚动至最新数据,以优化用户体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1,需求:

使用socket连接后端,每次后端数据到来之后,前端视图将实时更新,使得始终展示最新的数据在这里插入图片描述

2,思路

数据更新时,触发逻辑通过ref传入盒子将其scrollTop设置为盒子高度:

 mounted() {
    setInterval(() => {
      this.setDate();
      this.boxScroll(this.$refs.logBox);
    }, 3000);
    // openWebsocket("ws:", this.dealLog, this.dealLog);
  },
  methods: {
    boxScroll(o) {
      o.scrollTop = o.scrollHeight;
    },
    setDate() {
      this.activities.push({
        content: "支持使用图标",
        timestamp: moment(new Date()).format("YYYY-MM-DD h-m-s"),
      });
    },
    }

后端数据服务还未写好,所以先写了定时器假数据进行测试

3,问题

每次数据更新后,展示的都是倒数第二条数据
在这里插入图片描述

原因
功能实现比较简单, 但是现在的问题是, 因为vue视图渲染和取DOM之间有一个时间差,导致取DOM的时候,元素还没有渲染出来,所以取到的scrollHeight不足
现象
每次来新数据,底部显示永远是倒数第二条,想看最后一条,需要滚动一下才行,这样显然不行

4,解决方案

在这里插入图片描述
将数据变化触发滚动改为 在update钩子函数中触发:
效果:
在这里插入图片描述
做点简单的优化:
当鼠标进入盒子时,滚动条根据鼠标的滚轮来移动;
鼠标不在时,根据数据的更新及时显示底部最新数据
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值