用vue3模拟微信聊天功能显示头像及消息置底后自动上滑的代码

时间: 2024-03-31 20:33:27 浏览: 11
好的,以下是一个用 Vue3 实现微信聊天功能的示例代码,包括显示头像、消息置底和自动上滑。 ```html <template> <div class="chat"> <div class="chat-content" ref="chatContent"> <div class="message" v-for="message in messages" :key="message.id"> <div class="avatar"> <img :src="message.avatar" alt="avatar"> </div> <div class="text">{{ message.text }}</div> </div> </div> <div class="input"> <input type="text" v-model="newMessage" @keyup.enter="sendMessage"> <button @click="sendMessage">发送</button> </div> </div> </template> <script> import { ref, reactive, watchEffect } from 'vue' export default { setup() { const messages = reactive([ { id: 1, avatar: 'https://via.placeholder.com/50', text: '你好,这是第一条消息' }, { id: 2, avatar: 'https://via.placeholder.com/50', text: '这是第二条消息' }, { id: 3, avatar: 'https://via.placeholder.com/50', text: '这是第三条消息' } ]) const newMessage = ref('') const sendMessage = () => { if (!newMessage.value) return const id = messages.length + 1 const avatar = 'https://via.placeholder.com/50' const text = newMessage.value messages.push({ id, avatar, text }) newMessage.value = '' } // 消息置底 const chatContent = ref(null) watchEffect(() => { chatContent.value.scrollTop = chatContent.value.scrollHeight }) // 自动上滑 const lastScrollTop = ref(0) const handleScroll = () => { const { scrollTop, offsetHeight, scrollHeight } = chatContent.value if (scrollTop < lastScrollTop.value && scrollTop + offsetHeight < scrollHeight) { chatContent.value.scrollTop = chatContent.value.scrollHeight } lastScrollTop.value = scrollTop } return { messages, newMessage, sendMessage, chatContent, handleScroll } }, mounted() { this.$refs.chatContent.addEventListener('scroll', this.handleScroll) }, beforeUnmount() { this.$refs.chatContent.removeEventListener('scroll', this.handleScroll) } } </script> <style> .chat { height: 500px; border: 1px solid #ccc; display: flex; flex-direction: column; } .chat-content { flex: 1; overflow-y: auto; scroll-behavior: smooth; } .message { display: flex; margin-bottom: 10px; } .avatar { width: 50px; height: 50px; margin-right: 10px; } .text { flex: 1; background-color: #f0f0f0; padding: 10px; border-radius: 10px; } .input { display: flex; justify-content: space-between; padding: 10px; } .input input { flex: 1; margin-right: 10px; } .input button { width: 80px; } </style> ``` 上述代码中,我们使用了 Vue3 的 `reactive` 和 `ref` 方法来创建响应式数据和引用数据,使用 `watchEffect` 来监听 `messages` 的变化,实现消息置底。在 `setup` 函数中,我们还定义了一个 `handleScroll` 方法来监听 `chatContent` 的滚动事件,实现自动上滑。最后,在 `mounted` 和 `beforeUnmount` 生命周期中分别添加和移除 `scroll` 事件监听器,避免内存泄漏。

相关推荐

最新推荐

recommend-type

vue+web端仿微信网页版聊天室功能

主要介绍了vue+web端仿微信网页版聊天室功能,非常不错,具有一定的参考借鉴价值 ,需要的朋友可以参考下
recommend-type

vue使用微信扫一扫功能的实现代码

代码如下 import wx from “weixin-js-sdk”; import $ from “jquery”; goSao() { //这里【url参数一定是去参的本网址】,请求后端接口换取signature //(兼容安卓和ios) let url = "传值"; let ua = ...
recommend-type

vue 开发企业微信整合案例分析

主要介绍了vue 开发企业微信整合,结合具体案例形式分析了vue.js使用企业微信JSSDK实现手机端程序可以和企业微信进行整合功能的相关操作技巧,需要的朋友可以参考下
recommend-type

vue 项目如何引入微信sdk接口的方法

做微信的网页基本上都要接入微信的sdk,我在做的时候,也颇费了一番功夫,然后就想记录一下,供自己日后翻阅,以及让有需要的朋友可以做一下参考,如果喜欢的可以点波赞,或者关注一下,希望可以帮到大家。...
recommend-type

详解Vue微信授权登录前后端分离较为优雅的解决方案

主要介绍了详解Vue微信授权登录前后端分离较为优雅的解决方案,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

解释minorization-maximization (MM) algorithm,并给出matlab代码编写的例子

Minorization-maximization (MM) algorithm是一种常用的优化算法,用于求解非凸问题或含有约束的优化问题。该算法的基本思想是通过构造一个凸下界函数来逼近原问题,然后通过求解凸下界函数的最优解来逼近原问题的最优解。具体步骤如下: 1. 初始化参数 $\theta_0$,设 $k=0$; 2. 构造一个凸下界函数 $Q(\theta|\theta_k)$,使其满足 $Q(\theta_k|\theta_k)=f(\theta_k)$; 3. 求解 $Q(\theta|\theta_k)$ 的最优值 $\theta_{k+1}=\arg\min_\theta Q(
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。