vue3.0仿微信聊天|Vue3+Vant3.x聊天实例

Vue3-Chatroom 基于vue3.x开发的仿微信界面聊天室。

使用vue3.0+vuex4.x+vue-router4+vant3.x+v3popup构建的移动端聊天实例。基本实现了消息发送/gif动图、图片/视频预览、网址查看、红包/朋友圈等功能。

实现技术

  • 编码/技术:vscode+vue3.0/vuex4.x/vue-router4
  • UI组件库:vant-ui 3.x (有赞移动端vue3组件库)
  • 弹层组件:v3popup(基于vue3.0封装弹出层组件)
  • iconfont图标:阿里字体图标库
  • 自定义顶部导航栏+底部tabBar

项目中所有页面及逻辑均是使用最新vue3语法实现。

Vue3.0自定义弹层组件

项目中使用的弹框功能,是基于vue2版开发而来,并且保持功能效果一致。

大家如果对其实现感兴趣,可以去看看这篇文章。

https://blog.csdn.net/yanxinyun1990/article/details/111975487

另外顶部navbar和底部tabbar组件,功能效果和之前vue2版基本相同。

https://blog.csdn.net/yanxinyun1990/article/details/108997454

vue.config.js配置

vue3创建项目,默认是没vue.config.js配置文件的,根据项目需求可手动创建。

/*** Vue3页面配置文件*/const path = require('path')module.exports = {// 基本路径// publicPath: '/',// 输出文件目录// outputDir: 'dist',// assetsDir: '',// 环境配置devServer: {// host: 'localhost',// port: 8080,// 是否开启httpshttps: false,// 编译完是否打开网页open: false,// 代理配置// proxy: {//     '^/api': {//         target: '<url>',//         ws: true,//         changeOrigin: true//     },//     '^/foo': {//         target: '<other_url>'//     }// }},// webpack配置chainWebpack: config => {// 配置路径别名config.resolve.alias.set('@', path.join(__dirname, 'src')).set('@assets', path.join(__dirname, 'src/assets')).set('@components', path.join(__dirname, 'src/components')).set('@views', path.join(__dirname, 'src/views'))}
}

vue3.0主入口

主要引入路由、vuex及一些公共组件/样式。

/*** 主入口页面js*/import { createApp } from 'vue'
import App from './App.vue'// 引入vuex和地址路由
import store from './store'
import router from './router'// 引入js
import '@assets/js/fontSize'// 引入公共组件
import Plugins from './plugins'const app = createApp(App)app.use(store)
app.use(router)
app.use(Plugins)app.mount('#app')

vue3.0创建路由+实现登录验证拦截

/*** Vue3.0路由地址*/import { createRouter, createWebHistory } from 'vue-router'import store from '../store'import V3Popup from '@components/v3popup'const __routes = [// 登录|注册{name: 'login', path: '/login',component: () => import('../views/auth/login.vue'),},{name: 'register', path: '/register',component: () => import('../views/auth/register.vue'),},// ...
]const router = createRouter({history: createWebHistory(),routes: __routes,
})export default router
// 全局钩子拦截登录状态
router.beforeEach((to, from, next) => {const token = store.state.token// 判断当前路由地址是否需要登录权限if(to.meta.requireAuth) {if(token) {next()}else {// 未登录授权V3Popup({content: '还未登录授权!', position: 'top', popupStyle: 'background:#fa5151;color:#fff;', time: 2,onEnd: () => {next({ path: '/login' })}})}}else {next()}
})

Vue3聊天功能

vue3聊天编辑器模块是分离公共editor.vue组件。

在vue3中实现div的可编辑contenteditable属性。

<!-- //Vue3.0可编辑contenteditable功能 -->
<template><divref="editorRef"class="editor"contentEditable="true"v-html="editorText"@click="handleClick"@input="handleInput"@focus="handleFocus"@blur="handleBlur"style="user-select:text;-webkit-user-select:text;"></div>
</template>
const handleInput = () => {emit('update:modelValue', editorRef.value.innerHTML)data.lastCursor = getLastCursor()
}
// 删除内容
const handleDel = () => {let rangelet sel = window.getSelection()if(data.lastCursor) {sel.removeAllRanges()sel.addRange(data.lastCursor)}range = getLastCursor()range.collapse(false)document.execCommand('delete')// 删除表情时禁止输入法nextTick(() => {setTimeout(() => { editorRef.value.blur() }, 0);})
}
// 清空编辑器
const handleClear = () => {editorRef.value.innerHTML = ''
}

vue3中实现定位最后光标位置及在光标处插入表情内容。

/*** @Desc     Vue3.0实现可图文编辑器* @Time     andy by 2021-01* @About    Q:282310962  wx:xy190310*/
<script>import { ref, reactive, toRefs, watch, nextTick } from 'vue'export default {props: {modelValue: { type: String, default: '' }},setup(props, { emit }) {const editorRef = ref(null)const data = reactive({editorText: props.modelValue,isChange: true,lastCursor: null,})// ...// 获取光标最后位置const getLastCursor = () => {let sel = window.getSelection()if(sel && sel.rangeCount > 0) {return sel.getRangeAt(0)}}// 光标处插入内容 @param html 需要插入的内容const insertHtmlAtCursor = (html) => {let sel, rangeif(window.getSelection) {// IE9及其它浏览器sel = window.getSelection()// ##注意:判断最后光标位置if(data.lastCursor) {sel.removeAllRanges()sel.addRange(data.lastCursor)}if(sel.getRangeAt && sel.rangeCount) {range = sel.getRangeAt(0)let el = document.createElement('div')el.appendChild(html)var frag = document.createDocumentFragment(), node, lastNodewhile ((node = el.firstChild)) {lastNode = frag.appendChild(node)}range.insertNode(frag)if(lastNode) {range = range.cloneRange()range.setStartAfter(lastNode)range.collapse(true)sel.removeAllRanges()sel.addRange(range)}}} else if(document.selection && document.selection.type != 'Control') {// IE < 9document.selection.createRange().pasteHTML(html)}// ...}return {...toRefs(data),editorRef,handleInput,handleDel,// ...}}}
</script>

ok,基于vue3.x开发仿微信界面聊天实例就分享这么多。感谢大家的阅读~~  😀

最后附上两个实例项目

flutter+dart跨端聊天实例开发

uniapp+vue多端仿抖音小视频开发|uniapp直播实例

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/28072.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

4DIAC 运行时(Forte)连接PIFace Digital 2 模块

Piface 模块 Piface 是树莓PI 上的一个通用数字输入输出模块。采用SPI 与树莓派通信。 该模块使用microchip的MCP23S17SP 芯片。通过SPI 接口控制16个GPIO 端口&#xff0c;端口可以设置为输入或者输出方式。使用单一的接口来扩展linux IO 端口&#xff0c;减少了软件的复杂性…

什么是音色?

要问最近最火的节目是什么&#xff1f; 《浪姐》绝对可以冲击C位。 要问最近最火的剧是哪部&#xff1f; 有全中国小学生最近都怕的张东升老师那部前三甲无疑。 要问最近最火的歌是哪首&#xff1f; 《Mojito》或许是唯一的答案。 这首极具拉丁风格的歌让周董再一次回答了“谁是…

关于springboot+simbot+mriai实现QQ群智能回复机器人

前言 前几天在一个在一个java的交流群上发现了一个舔狗机器人&#xff0c;感觉有点意思。在git上逛了一圈发现simbot这个框架封装得还不错&#xff0c;这是一个基于kotlin的框架但他并不仅至此。用java也是能进行编写工作&#xff0c;我们简单尝试一下。 前期准备 本次demo使用…

四. IEC 61499开源项目4diac配置modbus

开源的4diac运行时只支持modbus主站&#xff08;modbus客户端&#xff09;&#xff0c;配置forte运行时支持modbus主站可以通过运行时操作支持modbus从站的远程IO模块&#xff0c;此处讲解的是modbus tcp。从4diac官网下载的forte运行时默认是不支持modbus协议的&#xff0c;要…

PDF Forte Pro(PDF转换器)v3.1.2免费版

PDF Forte Pro是一款优秀的PDF转换器&#xff0c;它支持将超过10种常用文件格式转换为PDF&#xff0c;包括word&#xff0c;Excle&#xff0c;PPT&#xff0c;PSD&#xff0c;Image和Dwg。所有Windows平台完美兼容&#xff0c;转换后的PDF文档无质量损失&#xff0c;而且拥有超…

FORTE和RIPPLE(瑞波)出资一亿美元成立基金,帮助游戏开发者应用区块链技术

a16z被投企业Forte向游戏开发者提供区块链技术平台和资金支持。 为游戏行业提供区块链技术平台的Forte和Ripple&#xff08;瑞波&#xff09;的开发者生态基金Xpring出资一亿美元成立基金帮助游戏开发者更好的利用区块链技术。该笔资金将与Forte的技术平台一起运作&#xff0c;…

关于MS Access替代方案 低代码神器 nuBuilder Forte:基于PHP和MySQL开源工具

很久很久以前用MS Access 写了几个程序&#xff0c;一直想把它们换掉&#xff0c;但始终没有找到一个工作量适度的工具&#xff0c;近来有点时间于是在网上查询&#xff0c;终于有了新发现nuBuilder Forte&#xff0c;这是需要服务器和PHP的软件包&#xff0c;一般来说花一到两…

4diac forte 1.12.0 版本modbus 的修改

问题 4diac 项目的更新真的是个问题。没有对所有的模块完成测试。在forte 1.12.0 版本上编译就出现了问题。4diac 的论坛上讨论的比较少&#xff0c;而且大多数是早几年的内容。没办法&#xff0c;只能自己啃源代码。 编译的问题。 &#xff11;&#xff0e;modbustimedeve…

Kabam创始人团队成立FORTE,打造区块链游戏平台

上海,2019年2月22日- 今日,数位资深游戏行业人士组成的创始人团队正式宣布成立Forte(发音为FOR-TAY)。他们来自Kabam、GarageGames、 Unity和Linden Lab等公司,团队累积拥有超过百年的游戏与技术平台开发经验。Forte旨在为游戏开发者打造加速区块链技术落地的应用平台,以…

4diac.forte 支持 OPC UA、MQTT、Modbus的方法

forte是基于c的第三方开源IEC 61499运行环境&#xff0c;默认可以不启用opcua&#xff0c;如果要启用opcua则需要在编译时指定opcua的参数。 1.OPCUA 1.在编译opcua时&#xff0c;即open62541, 需要定义 UA_ENABLE_AMALGAMATIONON 2.cmake forte时&#xff0c;需要FORTE_COM…

IEC61499开源项目FORTE部分源码分析

一、IEC 61499简介 IEC 61499 作为工业自动化领域分布式控制系统级建模语言的标准&#xff0c;其第一&#xff08;体系结构&#xff09;、二&#xff08;软件工具要求&#xff09;、四&#xff08;兼容文件的规则&#xff09;部分的第一版于 2005 年正式发布&#xff0c;并在 …

2023搜狐科技峰会结束 白春礼刘韵洁武向平等院士解读科技新格局

雷递网 乐天 5月18日 正值“517世界电信日”&#xff0c;搜狐于北京如期举办“2023搜狐科技峰会”。 走入第五个年头的峰会继续在内容深度和广度上实现新突破&#xff0c;从宇宙文明、天文卫星、人类永生&#xff0c;到核聚变、6G通信、脑机接口&#xff0c;再到通用人工智能时…

安卓版ChatGPT要来了!

千呼万唤始出来&#xff01; OpenAI并没有给出发布的具体日期&#xff0c;官宣中只是提供了一个“预订”&#xff08;预注册&#xff09;入口。 但安卓党们在得知这事后&#xff0c;纷纷搓起了激动的小手&#xff1a; 终于可以换回去用安卓手机了&#xff01; 不过这次OpenAI也…

关于嵌入式开发

写在前面 嵌入式是一个具有深度和广度的概念&#xff0c;设计的知识面非常广阔&#xff0c;如数字、电子、编程语言和通讯网络等。嵌入式开发就是指在嵌入式操作系统下进行开发。对于嵌入式系统的定义&#xff0c;目前一种普遍被认同的定义是&#xff1a;以应用为中心&#xff…

万字长文说清大模型在自动驾驶领域的应用

交流群 | 进“传感器群/滑板底盘群/汽车基础软件群/域控制器群”请扫描文末二维码&#xff0c;添加九章小助手&#xff0c;务必备注交流群名称 真实姓名 公司 职位&#xff08;不备注无法通过好友验证&#xff09; 作者 | 张萌宇 随着ChatGPT的火爆&#xff0c;大模型受到的…

Android开发成功转行车载开发之后,并没有想象中的那么简单,我承认,是我小瞧了它

前言 近几年的Android开发岗位就业环境想必大家也都有所耳闻&#xff0c;许多Android开发工程师都找不到自己满意的工作&#xff0c;于是纷纷另谋出路… 刚好这几年随着Android车载开发的兴起&#xff0c;令人眼睛一亮的是车载开发工程师的工资普遍偏高&#xff0c;这高昂的工…

2023年,Android程序员就业方向是怎样的?

一转眼&#xff0c;2023年一半就要过去了&#xff0c;各位Android程序员的工作还顺利吗&#xff1f; 今年以来各大厂纷纷爆出裁员的新闻&#xff0c;Chat GPT等人工智能工具的爆火也让今年IT行业的就业状况雪上加霜。 不少人觉得近几年的打工人普遍又卷又焦虑&#xff0c;岗位…

如何定义一款好的自动驾驶芯片?

导读 自动驾驶领域&#xff0c;传统处理器的竞争规则正发生急速的变化。 一般来说&#xff0c;人工智能的发展主要取决于两大基本要素&#xff1a;算力和算法。自动驾驶作为目前技术投入较大、商业落地较早、市场前景广阔的人工智能应用&#xff0c;其主控芯片的算力也被业内拿…

星火认知大模型发布,科大讯飞入场科技巨头AI大战?

自从ChatGPT横空出世&#xff0c;一个更美好的世界开始向我们招手。为了推开新时代的大门&#xff0c;几乎所有人工智能厂商都投入了最大的热情逐浪AIGC。 5月6日&#xff0c;科大讯飞召开了“讯飞星火认知大模型”成果发布会。发布会现场&#xff0c;科大讯飞董事长刘庆峰展示…

浪潮之巅 OpenAI有可能是历史上第一个10万亿美元的公司

淘金时代很像 如果你那个时候去加州淘金&#xff0c;一大堆人会死掉&#xff0c;但是卖勺子的人、卖铲子的人永远可以赚钱。所谓的shove and pick business。 大模型是平台型机会。按照我们几天的判断&#xff0c;以模型为先的平台&#xff0c;将比以信息为先的平台体量更大。…