electron+vue 仿微信客户端聊天|electron 仿微信界面|electron 聊天实例

electron+vue仿微信客户端聊天|electron仿微信界面|electron聊天实例

项目简介

采用 electron+vue+electron-vue+vuex+Node+electron-builder 等技术开发的高仿微信电脑端IM聊天ElectronVchat项目实例。实现了编辑器光标处插入消息/表情、图片/视频预览、拖拽功能/截图粘贴发送、朋友圈/红包/换肤等功能。

技术框架

  • 组合技术:electron + electron-vue + vue
  • 状态管理:Vuex
  • 地址路由:Vue-router
  • 字体图标:阿里iconfont字体图标库
  • 弹窗插件:wcPop
  • 打包工具:electron-builder
  • 图片预览:vue-photo-preview
  • 视频组件:vue-video-player

electron+vue仿微信客户端聊天|electron仿微信界面|electron聊天实例

electron+vue仿微信客户端聊天|electron仿微信界面|electron聊天实例

electron+vue仿微信客户端聊天|electron仿微信界面|electron聊天实例

electron+vue仿微信客户端聊天|electron仿微信界面|electron聊天实例

electron+vue仿微信客户端聊天|electron仿微信界面|electron聊天实例

electron+vue仿微信客户端聊天|electron仿微信界面|electron聊天实例

electron+vue仿微信客户端聊天|electron仿微信界面|electron聊天实例

electron+vue仿微信客户端聊天|electron仿微信界面|electron聊天实例

electron+vue仿微信客户端聊天|electron仿微信界面|electron聊天实例

electron+vue仿微信客户端聊天|electron仿微信界面|electron聊天实例

electron+vue仿微信客户端聊天|electron仿微信界面|electron聊天实例

electron+vue仿微信客户端聊天|electron仿微信界面|electron聊天实例

electron+vue仿微信客户端聊天|electron仿微信界面|electron聊天实例

electron+vue仿微信客户端聊天|electron仿微信界面|electron聊天实例

electron+vue仿微信客户端聊天|electron仿微信界面|electron聊天实例

electron+vue仿微信客户端聊天|electron仿微信界面|electron聊天实例

electron+vue仿微信客户端聊天|electron仿微信界面|electron聊天实例

electron+vue仿微信客户端聊天|electron仿微信界面|electron聊天实例

electron 是用 HTML,CSS 和 JavaScript 来构建跨平台桌面应用程序的一个开源库。electron-vue就是基于vue脚手架vue-cli和electron结合来把你的vue项目转化为桌面项目

官网:https://electronjs.org/

https://electron.org.cn/vue/index.html

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

electron主线程创建

electron-vue构建项目后,src目录下有main、renderer两个文件夹,分别对应主线程和渲染线程页面,主进程入口页面 src/main/index.js

/**
 * @Desc   主线程  Create by andy on 2019/12/26
 * @about   Q:282310962  wx:xy190310
 */

import { BrowserWindow, app, ipcMain, Tray, Menu } from 'electron'

// 引入主线程公共配置
import Common from './utils/common'

/**
 * Set `__static` path to static files in production
 * https://simulatedgreg.gitbooks.io/electron-vue/content/en/using-static-assets.html
 */
if (process.env.NODE_ENV !== 'development') {
  global.__static = require('path').join(__dirname, '/static').replace(/\\/g, '\\\\')
}

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,
    // 窗口创建的时候是否显示. 默认值为true
    show: 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 = null
      app.quit()
    }
  })

  initialIPC()
}

app.on('ready', createMainWin)

app.on('activate', () => {
  if(mainWin === null) {
    createMainWin()
  }
})

app.on('before-quit', () => {
  forceQuit = true
})

app.on('window-all-closed', () => {
  if(process.platform !== 'darwin') {
    app.quit()
  }
})

...

electron创建系统托盘图标+新消息闪烁

electron+vue仿微信客户端聊天|electron仿微信界面|electron聊天实例

/**
 * 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 = true
            mainWin = null
            app.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 = false

    if(bool) {
      if(flashTrayTimer) return
      flashTrayTimer = 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无边框效果、自定义顶部栏

electron+vue仿微信客户端聊天|electron仿微信界面|electron聊天实例

在BrowserWindow对象中配置frame:false后,就进入无边框窗体模式

设置 css -webkit-app-region: drag; 就能实现局部拖动效果

methods: {
    ...mapMutations(['SET_WINMAXIMIZE']),

    // 置顶窗口
    handleFixTop() {
        this.isAlwaysOnTop = !this.isAlwaysOnTop
        currentWin.setAlwaysOnTop(this.isAlwaysOnTop)
    },

    // 最小化
    handleMin() {
        currentWin.minimize()
    },

    // 最大化
    handleMax() {
        if(!currentWin.isMaximizable()) return
        if(currentWin.isMaximized()) {
            currentWin.unmaximize()
            this.SET_WINMAXIMIZE(false)
        }else {
            currentWin.maximize()
            this.SET_WINMAXIMIZE(true)
        }
    },

    // 关闭
    handleQuit() {
        currentWin.close()
    }
}

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

electron实现类似微信编辑器插入图文表情

思路:在vue页面设置div可编辑contenteditable="true" 自定义双向绑定v-model ,获取当前光标位置并插入表情。

由于之前有过一篇分享专门介绍如何在electron+vue中实现编辑器插入富文本图文
electron-vue 仿微信图文编辑器|截图功能分享

electron+vue仿微信客户端聊天|electron仿微信界面|electron聊天实例

到这里基于electron+vue开发仿微信pc桌面聊天项目就介绍完了,希望喜欢!!🐁🐁

Taro聊天室|react+taro仿微信聊天App界面|taro聊天实例

基于vue+uniapp直播项目|uni-app仿抖音/陌陌直播室

electron+vue仿微信客户端聊天|electron仿微信界面|electron聊天实例

本作品采用《CC 协议》,转载必须注明作者和本文链接
本文为原创文章,未经作者允许不得转载,欢迎大家一起交流 QQ(282310962) wx(xy190310)
本帖由系统于 4年前 自动加精
讨论数量: 4
翟宇鑫

请教下楼主,通讯用的什么呢?能否开源分享一哈 :kissing_heart:

4年前 评论
gaorenhua

开发不易,赞一个。

4年前 评论
VeryCool

:flushed: 万恶的CSS

4年前 评论

楼主,能否发下git地址

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
文章
47
粉丝
45
喜欢
101
收藏
54
排名:367
访问:2.6 万
私信
所有博文
博客标签
react
1
angular
1
react仿微信
2
react实战开发
2
react+redux
1
react网页聊天
2
angular仿微信
1
angular聊天室
1
angular+node聊天
1
h5仿微信
1
仿微信语音
1
仿微信界面
1
RN弹窗
1
react-native自定义弹窗
1
react-native弹窗
1
React Native
1
reactNative仿微信
1
RN仿微信聊天
1
ReactNative朋友圈
1
uniapp仿微信
1
uniapp聊天室
2
uniapp聊天App
1
uni-app+vue实例
1
uni-app即时通讯
1
uniapp直播
1
uni-app仿抖音
1
uniapp仿陌陌
1
uni-app小视频
1
taro仿微信
1
taro聊天室
1
taro仿微信界面
1
taro+react聊天APP
1
taro即时通讯
1
electron+vue
1
electron-vue仿微信
1
electron聊天
1
electron实例
1
flutter实例
1
flutter仿微信
1
flutter+dart聊天
1
flutter聊天室
1
flutter聊天界面
1
vue自定义弹窗
1
vue全局对话框
1
vue长按弹出框
1
vue右键弹层
1
nuxt对话框
1
vue仿微信弹窗
1
vue仿探探
1
vue仿Tinder
1
vue卡片堆叠
1
vue翻牌滑动
1
nuxt仿探探
1
nuxt聊天室
1
nuxt仿微信
1
nuxt即时聊天
1
vue+nuxt聊天实例
1
nuxt.js朋友圈
1
vue.js自定义对话框
1
vue pc端弹窗
1
vue.js桌面端模态框
1
vue弹窗组件
1
vue仿layer
1
vue.js自定义滚动条
1
vue虚拟滚动条
1
vue美化滚动条
1
vue仿饿了么滚动条
1
Vue-Scrollbar
1
react.js弹窗示例
1
react桌面端弹框
1
react.js自定义对话框
1
react pc自定义弹窗
1
react全局弹框
1
vue3.0自定义组件
1
vue3弹框
1
vue3.x对话框
1
vue3.0弹窗
1
vue3.0实例
1
vue3.0聊天室
1
vue3.0仿微信
2
vue3聊天模板
1
vue3+vant3实战开发
1
vue3.x案例
1
vue3聊天实例
1
vue3.0仿QQ
1
vue3.x实战聊天
1
vue3网页聊天
1
vue3.0仿抖音app
1
vue3短视频
1
vue3.x小视频
1
vue3.0直播实例
1
vue3+vite2+vant3实战
1
vue3跨端开发
1
electron仿QQ
1
electron打包
1
electron聊天室
1
electron仿微信
1
electron仿抖音
1
electron短视频
1
electron直播
1
vite2+electron12
1
vite2+vue3.x+swiper
1
vue3+vite.js+vant3
1
vue3后台系统
1
Electron管理系统
1
vite2+electron后台
1
electron12权限管理
1
electron桌面端后台
1
vue3桌面管理
1
vite2+electron13
1
electron仿mac桌面
1
electron桌面管理
1
vite2桌面应用
1
uniapp短视频
1
uniapp仿抖音
1
uni-app直播
1
uniapp后台
1
uni-app+uview后台系统
1
svelte.js实战开发
1
svelte3仿微信
1
svelte+svelteKit聊天室
1
svelte聊天实例
2
svelte朋友圈
1
svelte.js仿微信
1
svelte.js网页聊天
1
svelte-ui-admin
1
svelte-admin后台管理
1
svelte管理系统
1
tauri桌面应用
1
tauri+vue3
1
vite3+tauri
1
tauri聊天程序
1
tauri仿微信
1
vue3后台管理
1
vite.js管理系统
1
vue3+vite4
1
vite4+pinia
1
vue3+pinia2
1
vue3-chatgpt
2
vite-chatgpt
1
chatgpt-mobile
1
electron-chatgpt
1
electron+vite4+vue3
1
electron25-vue3
1
chatgpt-vite
1
uni-chatgpt
1
uniapp+vue3+pinia
2
vite+uniapp
1
chatgpt-uniapp
1
tauri-admin
1
tauri+rust+vue3
1
tauri后台管理
1
tauri-vite
1
tauri+vue3桌面端后台
1
react18 hooks
2
react18+arco
2
react18+zustand
1
react18-webchat
1
react18-admin
1
react-arco-admin
1
react-vite-admin
1
react18后台管理
1
electron-mateos
1
electron27+react18
1
electron-react-macos
1
electron桌面os
1
react-macos
1
uniapp+vue3直播
1
flutter3-chat
2
flutter3仿微信
2
flutter3聊天
2
flutter3+dart3
1
flutter3桌面端开发
1
flutter3-douyin
1
flutter3仿抖音
1
flutter3短视频
1
flutter3直播
1
flutter3-macos
1
flutter3-osx
1
flutter3桌面os
1
flutter3仿macOS
1
社区赞助商