Vue3 监听数据更新使div滚动到底部的实现(聊天框场景)

参考

起因

最近在做一个聊天功能,通过 ref 钩子绑定页面实现滚动底部后出现滚动不到底部的情况,猜测是页面未更新完毕的时候,就将 div 滚动到之前状态的底部。

代码

  1. html 容器代码, .message-container 容器需要有具体高度。
    <div class="message-container" ref="messageContainer">
    		<a-space direction="vertical" fill>
    		  <MessageItemView
    			v-for="i in messages"
    			:key="i"
    			:propIsMe="i.isMe"
    			:propMessage="i.content"
    		  />
    		</a-space>
    	  </div>
    
    	.message-container {
    	  height: calc(100% - 191px);
    	  padding: 10px 24px;
    	  position: relative;
    	  background-color: #fbfcfe;
    	  overflow-y: auto;
    	}
    
  2. 通过 watch 监听数据更新,并等待页面加载完毕后滚动到 div 底部。
     data() {
    	return {
    	  messages: [
    		{
    		  type: "text",
    		  isMe: false,
    		  content: "你好,我是夏秋初。",
    		}
    	  ],
    	  content: "",
    	};
      },
      watch: {
    	messages: {
    	  handler(newVal, oldName) {
    		/**
    		 * 页面更新完毕后再将页面滚动到底部
    		 */
    		this.$nextTick(() => {
    		  this.$refs.messageContainer.scrollTop =
    			this.$refs.messageContainer.scrollHeight;
    		});
    	  },
    	  deep: true,
    	  immediate: false,
    	},
      },
    
posted @   夏秋初  阅读(4145)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
点击右上角即可分享
微信分享提示