聊天Demo

参考链接

vue.js实现带表情评论功能前后端实现(仿B站评论)
vue.js实现带表情评论仿bilibili(滚动加载效果)

vue.js支持表情输入
vue.js表情文本输入框组件

个人说说vue组件

JS操作文本域获取光标/指定位置插入

使用

前端使用:vue.js + vuex + iconfont + element-ui
后端使用:springboot + mybatisplus + redis + netty + websocket + spring security

可能有不少问题,反正先按照自己思路一点一点写,再参考下别人是怎么搞的再优化

前端界面

先写下大概的前端界面,界面出来了,才有继续写下去的动力

在这里插入图片描述
在这里插入图片描述

消息窗口平滑滚动至底部

<div class="panel-main-body" ref="panelMainBodyContainerRef">

    <!-- 对应会话 的消息列表 -->
    <div class="msg-item-list" ref="msgItemListContainerRef">

        <div :class="['msg-item', familyChatMsg.senderId != currUserId ? 'other' : 'owner']"
             v-for="(familyChatMsg, idx) in familyChatMsgList" 
             :key="idx">
             
            <div class="avatar-wrapper ">
                <img :src="familyChatMsg.avatar" class="avatar fit-img" alt="">
            </div>
            
            <div class="msg">
            
                <div class="msg-header">
                    {
  { familyChatMsg.nickName }}
                </div>
                
                <div class="msg-content" v-html="familyChatMsg.content"></div>
            </div>

        </div>
    </div>
    
</div>

<script>
export default {
     

	methods: {
     
		/* 滚动至底部,不过调用此方法的时机应当在familyChatMsgList更新之后, 因此需要监听它 */
        scrollToEnd() {
     
            const panelMainBodyContainerRef = this.$refs['panelMainBodyContainerRef']
            const msgItemListContainerRef = this.$refs['msgItemListContainerRef']
            // console.log(msgItemListContainerRef.scrollTop);
            // console.log(panelMainBodyContainerRef.scrollHeight);
            msgItemListContainerRef.scrollTop = msgItemListContainerRef.scrollHeight
            console.log('滚动至底部~');
        },
    }

}
</script>

<style>
.msg-item-list {
     
     
	 /* 平滑滚动 */
     scroll-behavior: smooth;
}
</style>

vue使用watch监听vuex中的变量变化

computed: {
   
    ...mapGetters('familyChatStore', ['familyChatMsgList']),
},

watch: {
   
    // 监听store中的数据 - 是通过监听getters完成的
    familyChatMsgList:{
   
        handler(newVal, oldVal) {
   
            // console.log('---------------------');
            // console.log(newVal.length, oldVal.length);
            this.$nextTick(()=>{
   
                this.scrollToEnd()
            })
        }
    }

},

相关推荐

  1. Go语言聊天demo

    2024-01-07 17:46:04       19 阅读
  2. TCP<span style='color:red;'>聊天</span>

    TCP聊天

    2024-01-07 17:46:04      37 阅读
  3. TCP<span style='color:red;'>聊天</span>

    TCP聊天

    2024-01-07 17:46:04      28 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-07 17:46:04       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-07 17:46:04       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-07 17:46:04       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-07 17:46:04       18 阅读

热门阅读

  1. Linux iptables地址转换

    2024-01-07 17:46:04       30 阅读
  2. 代码随想录算法训练营

    2024-01-07 17:46:04       37 阅读
  3. leetcode08-棒球比赛

    2024-01-07 17:46:04       40 阅读
  4. 深入理解 Vue.js 中的 `h` 函数:虚拟 DOM 创建指南

    2024-01-07 17:46:04       113 阅读
  5. 计算机网络在中国的发展

    2024-01-07 17:46:04       41 阅读
  6. Linux中的强大的行处理器工具!awk!

    2024-01-07 17:46:04       33 阅读
  7. 云原生系列Go语言篇-标准库 Part 2

    2024-01-07 17:46:04       32 阅读
  8. go work

    2024-01-07 17:46:04       38 阅读
  9. 【Linux】CentOS 7重装保留数据的方法

    2024-01-07 17:46:04       40 阅读
  10. 面试 Vue 框架八股文十问十答第一期

    2024-01-07 17:46:04       43 阅读
  11. 【极客日常】慢查询的风险治理思路

    2024-01-07 17:46:04       47 阅读