V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
LeeReamond
V2EX  ›  问与答

vue 如何确保日志滚动条始终保持在最底下?

  •  
  •   LeeReamond · 2022-06-18 22:20:51 +08:00 · 1324 次点击
    这是一个创建于 889 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前端一个 div 展示由 ws 推送来的日志,遇到一个问题是,js 代码发出命令和浏览器实际渲染有一些时间差,如果代码写做

    1.更新 v-model 对象
    2.将该 div 的滚动条移至最下
    

    这样显然是不好使的,2 会比 1 先执行。理论上这种情况应该适用的是 nexttick ,但是我试了试将 2 加入 nexttick 当中并无效果。最后只能让 2 延迟执行,所以现在每次 v-model 刷新后都要过个几帧才能自动把滚动条移到最下面,强迫症表示很不爽啊。。

    6 条回复    2022-06-20 09:26:12 +08:00
    darklights
        1
    darklights  
       2022-06-18 23:06:39 +08:00   ❤️ 1
    不懂 vue ,js 和 dom 也是半桶水,不过 vue 应该有办法在 dom 层面添加事件:

    new MutationObserver(() => {
    yourDiv.scrollTop = yourDiv.scrollHeight;
    }).observe(yourDiv, {childList: true});
    4ark
        2
    4ark  
       2022-06-19 09:23:00 +08:00 via iPhone   ❤️ 1
    真实项目经验,将 div 180° 转换过去,也即最底部其实才是高度为 0 的地方,这样每次 append 都能在咀底部。
    4ark
        3
    4ark  
       2022-06-19 09:25:48 +08:00 via iPhone   ❤️ 4
    bylocker
        4
    bylocker  
       2022-06-19 12:09:36 +08:00 via Android
    vue-chat-scroll
    haolongsun
        5
    haolongsun  
       2022-06-19 13:32:34 +08:00
    nextTick 能实现的,StackOverflow 一大堆这样的实现。
    qrobot
        6
    qrobot  
       2022-06-20 09:26:12 +08:00
    @4ark 你他妈真是个人才。 卧操
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3016 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 13:54 · PVG 21:54 · LAX 05:54 · JFK 08:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.