1. 程式人生 > 其它 >Vue3 監聽資料更新使div滾動到底部的實現(聊天框場景)

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,
    	},
      },