HTML5技术

使用JS开发桌面端应用程序NW.js-1-Menu菜单的使用小记 - 小小沧海(2)

字号+ 作者:H5之家 来源:H5之家 2017-05-13 10:00 我要评论( )

个人猜测: nwjs只所以这样做是因为在mac OS系统中,似乎不支持纯一级菜单项。所以nwjs为了要兼容三方平台,统一行为,所以屏蔽了菜单栏的纯一级菜单项的点击功能,让其不具有实际功能,只能打开二级菜单栏。 5. 关

个人猜测:
nwjs只所以这样做是因为在mac OS系统中,似乎不支持纯一级菜单项。所以nwjs为了要兼容三方平台,统一行为,所以屏蔽了菜单栏的纯一级菜单项的点击功能,让其不具有实际功能,只能打开二级菜单栏。

5. 关于MenuItem 关于type属性

MenuItem菜单项有三种类型normal,checkbox,separator。
normal:标准模式,也是默认模式,纯文本菜单项。
checkbox:可选中的菜单项,前面会有一个对勾,重复点击状态来回切换。
separator:分割菜单项,展现为一条直线分隔符。

示例代码:

var reloadMenu = new nw.MenuItem({ label: "刷新", type: "normal", }); var separatorMenu = new nw.MenuItem({ type: "separator" }); var checkMenu = new nw.MenuItem({ type: "checkbox", label: "是否展现缩略图" }); var exitMenu = new nw.MenuItem({ label: "退出", });

效果如下:

另外:MenuItem的type属性只能在创建时设定,不能在运行时动态更改。

key属性不支持菜单栏形式下的一级菜单

在windows系统中:
菜单栏中的文字后面的括号下划线英文,是展开此菜单栏的快捷键,方式是 ALT+对应英文字母。
如下图,展开文件菜单的快捷键是 ALT+F,执行文件菜单中的关闭菜单项的快捷键是 ALT+C。

在nwjs中:
也提供了类似的功能,是MenuItem的key属性和modifiers属性。
key属性用来设定触发的快捷键。
modifiers属性用来设定跟快捷键相关联的修饰键。

如我们要设定菜单项刷新的快捷键为F5则可以:

var reloadMenu = new nw.MenuItem({ label: "刷新", key: "F5", click: function () { pageWindow.location.reload(); }, });

如要设定为快捷键为ALT+R则可以:

var reloadMenu = new nw.MenuItem({ label: "刷新", key: "r", modifiers:"alt", click: function () { pageWindow.location.reload(); }, });

展现效果为:

nwjs的问题在于:
nwjs中不支持设定菜单栏的一级菜单的快捷键。
也就是无论如何设定,一级菜单都不会相应快捷键自动弹出显示。无法实现windows系统中的效果。只有二级菜单及以下才生效。

另外:
如果给一个含有三级菜单的二级菜单设定快捷键,也就是给一个包含子集展开项设定了快捷键,其行为也不会像windows系统中那样展开他的下属菜单集合,而是直接执行当前它本身的click事件。

//刷新菜单的下属子集 var reloadMenuColl = new nw.Menu(); reloadMenuColl.append(new nw.MenuItem({ label: "刷新二级" })); /** 操作-刷新 */ var reloadMenu = new nw.MenuItem({ label: "刷新", key: "r", modifiers: "alt", click: function () { pageWindow.location.reload(); }, submenu: reloadMenuColl });

如图:

按下快捷键ALT+R,直接刷新了页面,而没有展开二级菜单。但如果用鼠标点击那个刷新菜单的话,是无论如何也不会触发刷新操作的。但通过快捷键反倒可以...

有关这一点nwjs的官方文档中并没有特殊说明,我姑且认定为没有太大影响的缺陷吧。详见:

源代码下载

本文上述源代码已托管至Github:
https://github.com/xxcanghai/nwjs-demo/tree/master/menu

欢迎Start & Follow~

后记

以上为nw.js入坑两周来的有关菜单开发的小记。因为我们要兼容XP系统,所以没得选,只能用nw.js。其github上的issue区也是红红火火,只能说感觉nw在很多功能细节上还需打磨和完善。

posted @

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 使用测试用例来约束自己的代码 - 陈宏鸿

    使用测试用例来约束自己的代码 - 陈宏鸿

    2017-05-09 14:00

  • VopSdk一个高逼格微信公众号开发SDK - deeround

    VopSdk一个高逼格微信公众号开发SDK - deeround

    2017-05-04 17:02

  • 【Vue 入门】使用 Vue2 开发一个展示项目列表的应用 - zhangjk

    【Vue 入门】使用 Vue2 开发一个展示项目列表的应用 - zhangjk

    2017-04-30 16:00

  • 对于Bootstrap的介绍以及如何使用 - novai-L

    对于Bootstrap的介绍以及如何使用 - novai-L

    2017-04-29 09:00

网友点评
0