electron实现类似QQ来新消息时的闪烁与任务栏窗口提醒

简介: 公司项目有一款带即时聊天、群组功能的APP,因为要给客服人员使用,需要开发PC版本。之前使用C#开发过一个PC版本,但是C#的UI这一块支持的不太好,而且升级比较麻烦,我就牵头基于Electron去实现了一个PC版本。

公司项目有一款带即时聊天、群组功能的APP,因为要给客服人员使用,需要开发PC版本。之前使用C#开发过一个PC版本,但是C#的UI这一块支持的不太好,而且升级比较麻烦,我就牵头基于Electron去实现了一个PC版本。

 

遇到了客服那边提过来的需求,当有新消息过来的时候,如果聊天窗口最小化了,需要有提醒,系统托盘也要像QQ一样有新消息过来的提醒与闪烁。

 

查了一个资料,两个功能都实现了。

image

image image

 

先看任务栏的提醒样式如何实现

const path = require('path');
const electron = require('electron');
const {
    app,
    BrowserWindow,
    Menu,
    ipcMain,
    Tray
} = electron;

let mainWnd = null;

mainWnd = new BrowserWindow({
    minWidth: 1200,
    minHeight: 750,
    resizable: true,
    icon: 'icon.ico',
    skipTaskbar: false
});
// 开始或停止显示窗口来获得用户的关注
mainWnd.flashFrame(true);

 

闪烁的原理就是,用定时器更换托盘图标的icon,一张正常、一张透明,切换(像眨眼睛一样)。

let appIcon = new Tray(iconPath);

const contextMenu = Menu.buildFromTemplate([{
    label: '移除',
    click: function() {
        event.sender.send('tray-removed');
    }
}, {
    type: 'separator'
}, {
    label: 'Item1',
    type: 'radio'
}, {
    type: 'separator'
},{
    label: 'MenuItem2',
    type: 'checkbox',
    checked: true
}]);

// Make a change to the context menu
contextMenu.items[2].checked = false;

appIcon.setToolTip('在托盘中的 Electron 示例.');

appIcon.setContextMenu(contextMenu);


var count = 0;
setInterval(function() {
    if (count++ % 2 == 0) {
        appIcon.setImage(path.join(__dirname, '../img/tray/tray_icon_2.png'));
    } else {
        appIcon.setImage(path.join(__dirname, '../img/tray/tray_icon.png'));
    }
}, 400);

 

上面两个功能并不复杂,主要是对API方法的调用。

 

 

参考:

[1] https://github.com/electron/electron/tree/master/docs-translations/zh-CN/api

[2] https://github.com/electron/electron/blob/master/docs-translations/zh-CN/api/browser-window.md

[3] https://github.com/electron/electron/blob/master/docs-translations/zh-CN/api/tray.md

[4] https://github.com/demopark/electron-api-demos-Zh_CN

[5] https://electron.atom.io/docs/

[6] https://www.w3cschool.cn/electronmanual/

目录
相关文章
electron解决创建新窗口html文件不能引入ipcRenderer通信
electron解决创建新窗口html文件不能引入ipcRenderer通信
|
Windows
Electron窗口白屏解决
Electron白屏问题主要出现在两方面: 1、electron未加载完毕html,electron自身产生的白色背景; 2、electron加载html,html处于加载渲染过程中产生的短暂白屏;
2101 0
Electron + Vite + TS + Vue3打开新窗口实战
前言 我们在使用 Electron 编写桌面应用时,打开新窗口可以说是一个非常常见的场景了。很多刚接触 Electron 的小伙伴面对这样一个问题可能都会显得比较棘手,比如打开新窗口如何知道渲染哪一个页面?打开的新窗口如何与其它窗口产生联系,比如父子窗口?...等等一系列问题。 今天我们就将 Electron 打开新窗口的常见做法分享给大家,而且是基于最新的 TS 封装。
1783 0
Electron + Vite + TS + Vue3打开新窗口实战
|
UED
解决Electron窗口白屏问题的预创建方案
在使用Electron创建窗口时,有时会遇到窗口显示白屏的问题。这篇文章将介绍一种解决方案,即预创建窗口,并提供了针对窗口关闭和应用退出的管理方法,以确保 Electron 应用的顺畅运行和用户体验
754 0
|
前端开发 API
Electron 渲染进程之间互相通信 创建窗口时触发
Electron 渲染进程之间互相通信 创建窗口时触发
electron菜单或托盘点击如何打开新的窗口
electron菜单或托盘点击如何打开新的窗口
|
JavaScript 前端开发
『快速入门electron』之实现窗口拖拽
## 看完本文你可学会 - 对于进程通信有基本的一个了解 - 学会自定义的顶部栏如何实现拖拽功能
electron-vue升级electron到最新的版本后启动不起来,窗口一闪而过。
electron-vue 升级electron到最新的版本后启动不起来,窗口一闪而过。 排查后原因: electron-vue中的集成了很多库 单方面升级了 electron版本,导致了其他库的版本的不匹配 解决: 升级配套库的版本
364 0
|
JavaScript 前端开发 Linux
客户端开发(Electron)认识窗口2
客户端开发(Electron)认识窗口2
326 0
客户端开发(Electron)认识窗口2
|
JavaScript 前端开发 Linux
客户端开发(Electron)认识窗口
客户端开发(Electron)认识窗口
515 0
客户端开发(Electron)认识窗口