聊天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

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

前端界面

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


消息窗口平滑滚动至底部

html 复制代码
<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中的变量变化

js 复制代码
computed: {
    ...mapGetters('familyChatStore', ['familyChatMsgList']),
},

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

},
相关推荐
power-辰南9 天前
Netty 常见面试题原理解析
java·开发语言·netty·nio
drebander10 天前
Netty 性能优化与调试指南
网络·性能优化·netty
JWASX14 天前
定时/延时任务-Netty时间轮源码分析
java·netty·定时任务·时间轮
drebander14 天前
Netty 的 SSL/TLS 安全通信
网络·netty·ssl
drebander15 天前
使用 Netty 实现 RPC 通信框架
网络协议·rpc·netty
drebander16 天前
使用 Netty 实现 WebSocket 通信
websocket·网络协议·netty
drebander16 天前
Netty 心跳机制与连接管理
网络·netty
drebander17 天前
Netty 入门应用:结合 Redis 实现服务器通信
java·redis·netty
drebander17 天前
Netty 的 Channel 和 ChannelFuture
java·网络·netty
程序猿进阶21 天前
ChannelInboundHandlerAdapter 与 SimpleChannelInboundHandler 的区别
java·开发语言·后端·面试·性能优化·netty·nio