使用Electron+Vue+electron-vue+vuex+Node+vue-video-player等技术构建开发的高仿微信客户端聊天室,实现了消息发送/表情,光标处插入表情,图片/视频预览,微信dll截图,右键菜单,红包/朋友圈/换肤功能。

ElectronVchat效果预览 (可最大/小化、关闭)

技术框架

  • 框架技术:electron + electron-vue + vue
  • 状态管理:Vuex
  • 地址路由:Vue-router
  • 字体图标:阿里iconfont字体图标库
  • 弹窗插件:wcPop
  • 打包工具:electron-builder
  • 环境配置:Node.js + Chromium
  • 图片预览:vue-photo-preview
  • 视频组件:vue-video-player
/*** @Desc   公共及全局组件配置* @about  Q:282310962  wx:xy190310*/// 引入公共组件
import winBar from './components/winbar'
import sideBar from './components/sidebar'// 引入公共样式
import './assets/fonts/iconfont.css'
import './assets/css/reset.css'
import './assets/css/layout.css'// 引入弹窗wcPop
import wcPop from './assets/js/wcPop/wcPop'
import './assets/js/wcPop/skin/wcPop.css'// 引入图片预览组件vue-photo-preview
import photoView from 'vue-photo-preview'
import 'vue-photo-preview/dist/skin.css'// 引入视频播放组件vue-video-player
import videoPlayer from 'vue-video-player'
import 'video.js/dist/video-js.css'const install = Vue => {// 注册组件Vue.component('win-bar', winBar)Vue.component('side-bar', sideBar)// 应用实例Vue.use(photoView, {// loop: false, //循环// fullscreenEl: true, //全屏// arrowEl: true, //左右按钮})Vue.use(videoPlayer)
}export default install

 

◆ 简要说明

如何搭建Electron开发环境及使用electron-vue,可去查阅官网及搜资料

https://electronjs.org/

https://simulatedgreg.gitbooks.io/electron-vue/content/cn/

https://github.com/SimulatedGREG/electron-vue

注意:由于electron-vue作者长时间未更新,里面electron版本仍旧为v2.0.4,如遇问题,可升级至新版本

◆ Electron主线程创建窗体

src目录下有main、renderer两个文件夹,分别是主进程及渲染进程,主进程入口文件src/main/index.js

通过electron里的BrowserWindow对象创建和控制浏览器窗口

...let mainWin
let tray
let forceQuit = false
let logined = false/*** 创建主窗口=============================*/
function createMainWin() {mainWin = new BrowserWindow({// 背景颜色// backgroundColor: '#ebebeb',width: Common.WIN_SIZE_MAIN.width,height: Common.WIN_SIZE_MAIN.height,title: Common.WIN_TITLE,useContentSize: true,autoHideMenuBar: true,// 无边框窗口frame: false,resizable: true,// 窗口创建的时候是否显示. 默认值为trueshow: false,webPreferences: {// devTools: false,webSecurity: false}})mainWin.setMenu(null)mainWin.loadURL(Common.WIN_LOAD_URL())mainWin.once('ready-to-show', () => {mainWin.show()mainWin.focus()})// 点击关闭最小到托盘判断mainWin.on('close', (e) => {if(logined && !forceQuit) {e.preventDefault()mainWin.hide()}else {mainWin = nullapp.quit()}})initialIPC()    apptray.createTray()
}app.on('ready', createMainWin)app.on('activate', () => {if(mainWin === null) {createMainWin()}
})...

electron实现创建系统托盘图标+闪烁、关闭最小化到托盘

/*** 托盘图标事件*/
let flashTrayTimer = null
let trayIco1 = `${__static}/icon.ico`
let trayIco2 = `${__static}/empty.ico`
let apptray = {// 创建托盘图标createTray() {tray = new Tray(trayIco1)const menu = Menu.buildFromTemplate([{label: '打开主界面',icon: `${__static}/tray-ico1.png`,click: () => {if(mainWin.isMinimized()) mainWin.restore()mainWin.show()mainWin.focus()this.flashTray(false)}},{label: '关于',},{label: '退出',click: () => {if(process.platform !== 'darwin') {mainWin.show()// 清空登录信息mainWin.webContents.send('clearLoggedInfo')forceQuit = truemainWin = nullapp.quit()}}},])tray.setContextMenu(menu)tray.setToolTip('electron-vchat v1.0.0')// 托盘点击事件tray.on('click', () => {if(mainWin.isMinimized()) mainWin.restore()mainWin.show()mainWin.focus()this.flashTray(false)})},// 托盘图标闪烁flashTray(bool) {let hasIco = falseif(bool) {if(flashTrayTimer) returnflashTrayTimer = setInterval(() => {tray.setImage(hasIco ? trayIco1 : trayIco2)hasIco = !hasIco}, 500)}else {if(flashTrayTimer) {clearInterval(flashTrayTimer)flashTrayTimer = null}tray.setImage(trayIco1)}},// 销毁托盘图标destroyTray() {this.flashTray(false)tray.destroy()tray = null}
}

electron点击关闭按钮,最小化到系统托盘

// 点击关闭最小到托盘判断
mainWin.on('close', (e) => {if(logined && !forceQuit) {e.preventDefault()mainWin.hide()}else {mainWin = nullapp.quit()}
})

◆ Electron渲染线程主入口main.js配置

import Vue from 'vue'
import axios from 'axios'import App from './App'
import router from './router'
import store from './store'// 引入组件配置
import $components from './components'
Vue.use($components)if (!process.env.IS_WEB) Vue.use(require('vue-electron'))
Vue.http = Vue.prototype.$http = axios/* eslint-disable no-new */
new Vue({components: { App },router,store,template: '<App/>'
}).$mount('#app')

renderer目录下主要是前端vue模板页面,具体页面和vue写法一样,不作多介绍

◆ Electron自定义无边框窗口、最大/小化/关闭按钮

BrowserWindow对象中配置frame: false就能实现无边框窗体,拖动窗口功能需另行处理

拖动窗口两种实现方式:

  • 通过mousedown、mousemove等事件处理, 这里就不作介绍。
  • 设置拖动区局部css属性:-webkit-app-region: drag;

注意:默认设置-webkit-app-region: drag后,下面的元素不能点击操作,可通过设置需点击元素no-drag即可。

// 置顶窗口
handleFixTop() {this.isAlwaysOnTop = !this.isAlwaysOnTopcurrentWin.setAlwaysOnTop(this.isAlwaysOnTop)
},// 最小化
handleMin() {currentWin.minimize()
},// 最大化
handleMax() {if(!currentWin.isMaximizable()) returnif(currentWin.isMaximized()) {currentWin.unmaximize()this.SET_WINMAXIMIZE(false)}else {currentWin.maximize()this.SET_WINMAXIMIZE(true)}
},

◆ Electron编辑器光标处插入表情、微信截图dll

vue中设置div可编辑 contenteditable="true" 自定义双向绑定v-model

至于如何实现,这里不多介绍,可以去看之前的一篇分享文章。

https://segmentfault.com/a/1190000021510872

okey,使用Electron+Vue开发桌面端聊天实例项目就介绍到这里,希望能喜欢~~

最后分享两个uniApp、vue实例聊天项目

uni-app聊天室|vue+uniapp仿微信聊天实例|uniapp仿微信App界面

vue仿微信网页版|vue+web端聊天室|仿微信客户端vue版

electron-vue仿微信聊天客户端|electron聊天应用相关推荐

  1. ios 探探编辑页图片拖动_nuxt+vue仿微信/探探界面|nuxt聊天实例

    最近趁着空闲时间给自己充充电,捣鼓学习了下Nuxt.js框架并开发了一个聊天项目 NuxtChat . 如上图:一些演示效果片段.emmm~ 不错哟  项目介绍 基于nuxt.js+vue.js+vu ...

  2. (仿微信Android)IM聊天+抢红包+直播+朋友圈源码发布了

    (仿微信Android)IM聊天+抢红包+直播+朋友圈源码发布了 功能概览: IM聊天 单聊/群聊/聊天室--基于环信sdk 红包功能: 1.一对一红包 2.群红包(抢红包.答题红包.专属红包) 3. ...

  3. 12、Flutter - 项目实战 - 仿微信(六)聊天页面

    Flutter - 项目实战 - 仿微信(六)聊天页面 接上篇:11.Flutter - 项目实战 - 仿微信(五)通讯录 详细代码参见Demo Demo地址 -> wechat_demo 其他 ...

  4. vue仿微信网页版|vue+web端聊天室|仿微信客户端vue版

    一.项目介绍 基于Vue2.5.6+Vuex+vue-cli+vue-router+vue-gemini-scrollbar+swiper+elementUI等技术混合架构开发的仿微信web端聊天室- ...

  5. vue-cli脚手架集成websocket客户端实现高仿微信网页版在线聊天

    本次需求 做一个高仿微信网页版在线聊天系统,好友相互之间进行单聊 技术支持 springboot服务端提供websocket服务端连接 vue-cli提供websocket客户端与后端进行连接 实现效 ...

  6. 仿微信界面开发的聊天软件和聊天客户端功能介绍

    系统模式:独立系统版本,独立服务器部署,服务器配置:建议 4 核 8G:10M 带宽既可 以下是聊天系统客户端的功能介绍,服务端的功能我会再写一篇文章接着 仿微信聊天开发的聊天软件以及聊天客户端功能介 ...

  7. nuxt-chat聊天室|vue仿微信/探探界面nuxt+vue+vuex|朋友圈

    Nuxt-Chatroom 基于Nuxt.js+Vue.js仿微信|探探App界面聊天社交 运用nuxt.js+vue.js+vuex+vpopup+vant+webpack等技术架构开发的社交聊天室 ...

  8. Vue仿微信app页面跳转动画

    独立开发者在开发移动端产品时,为了更高效,通常会使用Web技术来开发移动端项目,可以同时适配Android.iOS.H5,稍加改动还可适配微信小程序. 在使用Vue.js开发移动端页面的时候,默认的组 ...

  9. SPRING BOOT + VUE仿微信聊天

    开发工具(eclipse/idea/vscode等):idea,webstore 数据库(sqlite/mysql/sqlserver等):mysql 功能模块(请用文字描述,至少200字):添加好友 ...

最新文章

  1. Docker(四):Docker 命令大全
  2. js截屏 video_js获取视频截图
  3. wxWidgets:wxConfigPathChanger类用法
  4. 前端学习(2009)vue之电商管理系统电商系统之渲染商品属性的结构
  5. LeetCode 783. 二叉搜索树结点最小距离(中序遍历)
  6. SpringBoot之AOP之基本使用
  7. TensorBoard 1.15.0 at http://DESKTOP-DV74NQ2:6006/ 打开html后无法展示解决方案
  8. 光模块组装过程中常见问题分析及解决方法
  9. share my tools With Xcode
  10. 浅复制和深复制的区别?//浅拷贝和深拷贝
  11. 聊聊spring for kafka对consumer的封装与集成 1
  12. 草根学Python(十四) 一步一步了解正则表达式
  13. linux的使用 --- 安装git
  14. Echar的学习记录
  15. python画航线图_pyecharts绘制geo地图
  16. 物联网共享打印机系统是怎么做出来的?
  17. css3 - 图标元素动画效果3 - 图标整体在Y轴上移
  18. Elasticsearch(ES)的基本使用
  19. latex文字两端对齐
  20. 【强化学习】模仿学习:行为克隆

热门文章

  1. 德国斯派克SPECTRO光谱仪电源维修SAI-EK0606
  2. ios android安全性分析,为什么android安全性比iOS差?有3个原因 - 区块网
  3. 深入浅出Android!面试题解析已整理成文档,成功入职腾讯
  4. 互联网高级架构师用4000字带你把大型网站的业务演变过程给讲明白
  5. 国企央企OFFER收割全攻略 | 银行篇之面试
  6. 青松资讯:想窃取用户密码?一个“U盘”就能搞定
  7. 新库上线 | CnOpenData全国景区数据
  8. 学习python爬虫一个月的小兄弟,是如何日赚800实现经济独立的
  9. 有趣网站盲盒项目设计
  10. 前快播CEO王欣今天发布的这款马桶MT你会用吗?