使用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. Android之GPS定位详解
  2. Ubuntu18.04 VMtools的安装与卸载
  3. pycharm Python解释器的配置--可以指定批处理文件为解释器
  4. org.activiti.engine.ActivitiException: Couldn‘t deserialize object in variable ‘application‘
  5. Snabbdom(虚拟dom-h函数)
  6. webdriver 等待页面加载完成_Python+selenium自动化之等待
  7. 唯唯码 - ios/android的app下载地址合并为一个二维码
  8. ps4手柄驱动linux,GeForce 344.11正式版驱动:支持GTX 980/970,集成DSR选项
  9. 新年PHP微信抽奖系统源码开源二开版带完整后台,支持修改开发
  10. 如何把身份证扫描成电子版?证件转电子版,这3个方法超好用
  11. 嵌入式linux程序加密,基于嵌入式操作系统uClinux实现网络安全加密系统的设计
  12. python上机编程报告_Python程序设计实验报告六:函数
  13. 清明节微信公众号图文排版有哪些经典素材?
  14. 正则表达式与遇到的问题
  15. 2023程序员秋招准备 c/c++Linux后端开发岗(简历/技术面)技能体系总结
  16. 论文投稿指南——中文核心期刊推荐(计算机技术2)
  17. 2020就业形势报告:计算机相关行业仍是最热,人工智能聚集北上广深
  18. linux挂起 终端连不上吗,Linux系统11个不能不知道的终端命令
  19. 51单片机串口通信模板_51单片机串口通信(字符串接收和发送)(示例代码)
  20. 为什么越来越多的浏览器都宣布将不支持Flash插件?

热门文章

  1. 北美五大湖-世界最大的淡水湖群
  2. 期货交易入门流程(期货交易入门书籍)
  3. 【MySQL 第一天安装教程】
  4. 微信小程序开发(Demo),微信公众号开发
  5. 25个漂亮的国外绿色网站设计作品分享
  6. ShowMeBug 荣获稀土掘金「2021年度人气技术团队」
  7. Centos8双系统安装与卸载Grub Error
  8. python幂运算符_Python程序使用指数运算符查找数字的幂
  9. sql server 2382端口问题
  10. 电脑备忘录怎么恢复删除的数据