Electron - Menu 菜单

Menu 菜单

引入 Menu 模块

const { Menu } = require('electron')

Menu 静态方法

静态方法就是一些 Menu 提供的内置方法

  • 设置菜单
  • 参数:menu 实例、null
  • 返回:void
// 方法接受 menu 对象,展示 menu 实例内容;传入 null,将会禁用默认菜单功能(win\linux);如果不传值,展示默认菜单
Menu.setApplicationMenu(menu | null)
  • 获得菜单
  • 参数:null
  • 返回:menu 实例、null
// 如果设置了菜单则得到一个 menu 实例,如果没有设置菜单,返回一个 null
// 默认获取的是系统级菜单
Menu.getApplicationMenu()
  • 格式化构建一个 menu 实例
  • 参数:template 对象,一个数组,用于构建 menu 实例
  • 返回:menu 实例
// 如果设置了菜单则得到一个 menu 实例,如果没有设置菜单,返回一个 null
Menu.buildFromTemplate(template)

// template 示例
let template = [{
    label: `Version ${version}`,
    enabled: false
  }, {
    label: 'Checking for Update',
    enabled: false,
    key: 'checkingForUpdate'
  }, {
    label: 'Check for Update',
    visible: false,
    key: 'checkForUpdate',
    click: () => {
      require('electron').autoUpdater.checkForUpdates()
    }
  }, {
    label: 'Restart and Install Update',
    enabled: true,
    visible: false,
    key: 'restartToUpdate',
    click: () => {
      require('electron').autoUpdater.quitAndInstall()
    }
  }]
  • 发送一个相应事件(macOS)
  • 参数:action 是 String 类型
  • 返回:null
// 将 action 发送到应用程序的第一个响应方。 这用于模拟默认的 macOS 菜单行为。 通常你可以使用MenuItem的role属性
Menu.sendActionToFirstResponder(action)

menu 实例方法

menu 实例中内置的方法

  • 得到一个实例
// 1
const menu = new Menu()
// 2
const menu = Menu.buildFromTemplate(template)
// 3 实例可以被修改属性,但是不支持增删
const menu = Menu.getApplicationMenu()
  • 弹出菜单
  • 参数:window 窗口实例、x、y 显示位置、positioningItem 菜单项的位置、callback 回调方法
  • 返回:null
menu.pupop(window | x | y | positioningItem(macOS) | callback)
  • 关闭菜单
  • 参数:window 可选项,默认当前窗口
  • 返回:null
menu.closePopup(window)
  • 追加菜单
  • 参数:MenuItem 实例
  • 返回:null
// 在 menu 实例被展示前可以进行修改,通过 Menu 静态方法获取的实例对象无法增删
menu.append(MenuItem)
  • 获取指定的菜单
  • 参数:id 设置菜单时指定的唯一属性值,如果没有设置,系统会按照默认的顺序进行标号 commandId
  • 返回:menu 实例
menu.getMenuItemById(id)
  • 插入菜单
  • 参数:position 位置信息,integer 类型,0 为开始;MenuItem 菜单实例
  • 返回:null
// 菜单展示前操作,可自定义插入位置,如果不指定 position ,默认 append 方法
menu.insert(position, MenuItem)
  • 属性值
  • 获取 menu 的菜单内容
menu.items

事件

  • 展示事件
app.on('menu-will-show', (event) => {
  // do something
  // menu.popup() emit
})
  • 关闭事件
app.on('menu-will-close', (event) => {
  // do something
  // menu.closePopup() emit
})

MenuItem 菜单项

引入 MenuItem 模块

const { menuItem } = require('electron') 

MenuItem 静态方法

  • 创建一个 MenuItem 实例
let menuitem = new MenuItem({
  id: '', // 唯一属性值,可以不设,
  label: 'test', // 菜单的展示名称
  sublabel: '', // 菜单名称下的弱文字
  accelerator: 'CmdOrCtrl+Z', // 加速器,用于设定快捷键
  icon: '', // 菜单图标,接受 NativeImage 对象或者 relative path
  enabled: '', // 是否可用
  visible: '', // 是否可见
  submenu: '', // 子菜单属性,只有 type 为 submenu 时使用,接受 Menu 对象,如果不是 Menu 对象,自动 Menu.buildFromTemplate() 转
  checked: '', // 选择属性,只为 type 为 checkbox 和 radio 时可用
  type: '', // 菜单类型,normal、separator、submenu、checkbox 或 radio
  role: '', // 角色,为这个菜单定义一个预设行为。使用 role 时, label 和 accelerator 值是可选的, 并为每个平台,将默认为适当值
  after: [''], // 定位操作,指定目标之后
  before: [''], // 定位操作,指定目标之前
  afterGroupContaining: [''], // 定位操作,指定目标小组之后
  beforeGroupContaining: [''], // 定位操作,指定目标小组之前
  // macOS
  toolTip: '', // 该菜单项的悬停文本
  acceleratorWorksWhenHidden: '', // 如果菜单被禁用,快捷键是否可以用。默认是 true
  // win linux
  registerAccelerator:'', // 是否注册快捷键,默认 true,如果 false,不会进行注册也不会显示
  click: (menuitem, browserWindow, event) => {
    // do something
    // menuitem 是当前菜单项
    // browserWindow 是当前焦点窗口
    // event 事件 { shiftKey: false, ctrlKey: false, altKey: false, metaKey: false }
  }
});

Tips:

对定位操作的一些补充:

// 菜单位置
// 一般情况是,菜单的顺序都是自己定好的;但是如果需要通过某些条件来限定菜单的加载顺序,那就需要对菜单的位置选项进行了解
// before, after, beforeGroupContaining, afterGroupContaining 和 id
// 顺序执行,如果已经存在id属性,会按照id属性排序,如果id属性不存在,则按照原始位置顺序排序

let template = [
  { id: '1', label: 'one', after: ['1'] },
  { type: 'separator' },
  { id: '3', label: 'three', beforeGroupContaining: ['1'] },
  { id: '4', label: 'four', afterGroupContaining: ['2'] },
  { type: 'separator' },
  { id: '2', label: 'two', before: ['3'] }
];

属性值

实例属性值,基本上所有能够设置的属性都是可以通过对应的名称获取到的,below 我们将会补充一些其他的内容

  • 菜单标识位
// 菜单项对应的顺序 id
menuitem.commandId
  • 菜单的一部分
// 一部分菜单
menuitem.menu
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值