vue div框消息不断增加 自动滚动到底部

这篇博客详细介绍了如何在 Vue.js 应用中实现聊天记录的实时更新和自动滚动到底部的功能。通过监听滚动事件和设置数据更新后的回调,确保当新消息到来时,滚动条始终位于聊天框的底部,从而提供无缝的用户体验。
<template>
<div class="consoleBox">
					<div class="curentScroll" v-for="(item,index) in debugProcessList" :key="index" style="line-height: 30px;">{{item.createTime}} &nbsp;&nbsp;&nbsp;{{item.content}}</div>
				</div>
</template>

export default {
    name: 'parkScreen',
    data() {
        return {
        oldScrollTop:0,
			scrollFlag:true,
}
       },
  mounted() {
        var that = this;
		//监听滚动事件
	    document.querySelector(".consoleBox").addEventListener('scroll',this.scrolling)
	    //初始化数据 此处可以通过setInterval 来不断增加数据 也可通过websockt来不断的增加数据 达到有数据就滚动到底部的效果
	    this.getUpdataData()
	   },
 methods: {   
 getUpdataData(){
			let that=this
			let robotId=1
			//获取数据---根据实际情况自己获取数据
			getDebugRecord({tobotId:robotId}).then(res => {
				if(res.rows.length>0){
					that.debugProcessList=[]
					that.debugProcessList=res.rows
				}
			})
			
			//调用保持滚动条方法(这一步也可以在updated生命周期调用)
			if(this.scrollFlag){
				this.scrollToBottom();
			}
		},
	//滚动条保持最底部方法
		scrollToBottom () {
			this.$nextTick(() => {
				var container = this.$el.querySelector(".consoleBox");
				container.scrollTop = container.scrollHeight;
			})
		},
		scrolling() {
			let scrollTop = document.querySelector(".consoleBox").scrollTop 
			// 更新——滚动前,滚动条距文档顶部的距离
			let scrollStep = scrollTop - this.oldScrollTop;
			this.oldScrollTop = scrollTop;
			//判断当前是向上or向下滚动
			if (scrollStep < 0) {
				//向上
				this.scrollFlag=false
			}else{
				this.scrollFlag=true
			} 
		},
}
### Vue3 实现聊天发送消息自动滚动底部Vue3 中实现聊天发送消息自动滚动底部的功能可以通过监听消息列表的变化并触发相应的 DOM 操作来完成。以下是具体的实现方法: #### 使用 `nextTick` 和 Refs 进行操作 通过使用 Vue 的 Composition API 可以更方便地管理组件的状态和生命周期钩子。 ```javascript <template> <div ref="chatContainer" class="chat-container"> <ul> <li v-for="(message, index) in messages" :key="index">{{ message }}</li> </ul> <input @keyup.enter="sendMessage" v-model="newMessage" placeholder="Type a message..." /> </div> </template> <script setup> import { ref, onMounted, nextTick } from &#39;vue&#39;; const chatContainer = ref(null); const newMessage = ref(&#39;&#39;); const messages = ref([]); function sendMessage() { if (newMessage.value.trim()) { messages.value.push(newMessage.value); newMessage.value = &#39;&#39;; scrollToBottom(); } } async function scrollToBottom() { await nextTick(); // Wait until the DOM is updated if (chatContainer.value) { chatContainer.value.scrollTop = chatContainer.value.scrollHeight; } } </script> <style scoped> .chat-container { max-height: 400px; overflow-y: auto; } </style> ``` 此代码片段展示了如何利用 Vue3 的组合式 API 来创建一个简单的聊天界面,并确保每次有新的消息被添加时,视图都会自动调整至新的位置[^1]。 #### 利用第三方库简化开发过程 对于希望减少自定义逻辑的情况,还可以考虑引入专门用于处理这类场景的插件,比如 `vue-chat-scroll` 插件可以帮助快速集成这一特性而无需手动编写过多额外的 JavaScript 代码[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值