当前位置:   article > 正文

Electron中使用tray模块实现系统拖盘_electron tray

electron tray

Electron中的tray模块主要用来实现桌面软件特有的拖盘功能,包括创建拖盘图标、拖盘悬停提示、拖盘右键菜单、拖盘消息提示等等。

1. 创建拖盘;

  1. var { Menu, Tray, BrowserWindow, app } = require('electron');
  2. var path = require('path');
  3. // 创建拖盘
  4. var iconTray = new Tray(path.join(__dirname,'../static/love.png'));

2. 鼠标悬停拖盘提示;

  1. // 鼠标悬停托盘提示
  2. iconTray.setToolTip('Electron应用');

3. 拖盘右键菜单;

  1. // 配置右键菜单
  2. var trayMenu = Menu.buildFromTemplate([
  3. {
  4. label: '设置',
  5. click: function () {
  6. console.log('setting')
  7. }
  8. },
  9. {
  10. label: '升级',
  11. click: function () {
  12. console.log('update')
  13. }
  14. },
  15. {
  16. label: '退出',
  17. click: function () {
  18. if (process.platform !== 'darwin') {
  19. app.quit();
  20. }
  21. }
  22. }
  23. ]);
  24. // 绑定右键菜单到托盘
  25. iconTray.setContextMenu(trayMenu);

4. 点击关闭保存到拖盘;

  1. setTimeout(function(){
  2. var win = BrowserWindow.getFocusedWindow();
  3. // 点击关闭按钮让应用保存在托盘
  4. win.on('close', (e) => {
  5. if (!win.isFocused()) {
  6. win = null;
  7. } else {
  8. // 阻止窗口的关闭事件
  9. e.preventDefault();
  10. win.hide();
  11. }
  12. });
  13. })

5. 双击拖盘打开应用;

  1. // 任务栏图标双击托盘打开应用
  2. iconTray.on('double-click', function () {
  3. win.show();
  4. });

6. 新消息提示;

  1. // 消息提示
  2. var count = 0;
  3. var timer = setInterval(function () {
  4. count++;
  5. if (count % 2 == 0) {
  6. iconTray.setImage(path.join(__dirname,'../static/love.png'));
  7. } else {
  8. iconTray.setImage(path.join(__dirname,'../static/empty.png'));
  9. }
  10. }, 500)

7. 图标注意事项;

8. 代码完整示例;

主进程文件main.js代码:

  1. // main.js
  2. const { app, BrowserWindow } = require("electron");
  3. const path = require("path");
  4. const createWindow = () => {
  5. // 创建窗口
  6. const mainWindow = new BrowserWindow({
  7. width: 800,
  8. height: 600,
  9. webPreferences: {
  10. // 开启node
  11. nodeIntegration: true,
  12. // 取消上下文隔离
  13. contextIsolation: false,
  14. // 开启remote
  15. enableRemoteModule:true,
  16. }
  17. });
  18. // 加载本地文件
  19. mainWindow.loadFile(path.join(__dirname, "index.html"));
  20. // 加载远程地址
  21. // mainWindow.loadURL('https://github.com');
  22. // 开启调试模式
  23. mainWindow.webContents.openDevTools();
  24. // 自定义底部拖盘
  25. require('./main/ipcMain');
  26. }
  27. // 监听应用的启动事件
  28. app.on("ready", createWindow);
  29. // 兼容MacOS系统的窗口关闭功能
  30. app.on("window-all-closed", () => {
  31. // 非MacOS直接退出
  32. if (process.platform != "darwin") {
  33. app.quit();
  34. }
  35. });
  36. // 点击MacOS底部菜单时重新启动窗口
  37. app.on("activate", () => {
  38. if (BrowserWindow.getAllWindows.length == 0) {
  39. createWindow();
  40. }
  41. })

主进程文件main.js中引入的ipcMain.js文件代码:

  1. var { Menu, Tray, BrowserWindow, app } = require('electron');
  2. var path = require('path');
  3. // 创建拖盘
  4. var iconTray = new Tray(path.join(__dirname,'../static/love.png'));
  5. // 鼠标悬停托盘提示
  6. iconTray.setToolTip('Electron应用');
  7. // 配置右键菜单
  8. var trayMenu = Menu.buildFromTemplate([
  9. {
  10. label: '设置',
  11. click: function () {
  12. console.log('setting')
  13. }
  14. },
  15. {
  16. label: '升级',
  17. click: function () {
  18. console.log('update')
  19. }
  20. },
  21. {
  22. label: '退出',
  23. click: function () {
  24. if (process.platform !== 'darwin') {
  25. app.quit();
  26. }
  27. }
  28. }
  29. ]);
  30. // 绑定右键菜单到托盘
  31. iconTray.setContextMenu(trayMenu);
  32. setTimeout(function(){
  33. var win = BrowserWindow.getFocusedWindow();
  34. // 点击关闭按钮让应用保存在托盘
  35. win.on('close', (e) => {
  36. if (!win.isFocused()) {
  37. win = null;
  38. } else {
  39. // 阻止窗口的关闭事件
  40. e.preventDefault();
  41. win.hide();
  42. }
  43. });
  44. })
  45. // 任务栏图标双击托盘打开应用
  46. iconTray.on('double-click', function () {
  47. win.show();
  48. });
  49. // 消息提示
  50. var count = 0;
  51. var timer = setInterval(function () {
  52. count++;
  53. if (count % 2 == 0) {
  54. iconTray.setImage(path.join(__dirname,'../static/love.png'));
  55. } else {
  56. iconTray.setImage(path.join(__dirname,'../static/empty.png'));
  57. }
  58. }, 500);

渲染进程文件index.html代码:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>Electron开发</title>
  7. </head>
  8. <body>
  9. <p>Electron中Tray模块实现系统托盘功能</p>
  10. </body>
  11. </html>

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/788034
推荐阅读
相关标签
  

闽ICP备14008679号