node-webkit教程(6)Native UI API 之Menu(菜单)1

前言... 2

6.1  Menu 概述... 3

6.2  menu api6

6.2.1  new Menu([option])6

6.2.2  Menu.items. 6

6.2.3 Menu.items.length. 7

6.2.4 Menu.items[i]7

6.2.5  Menu.append(MenuItem item)7

6.2.6 Menu.insert(MenuItem item, int i)7

6.2.7 Menu.remove(MenuItem item)7

6.2.8  Menu.removeAt(int i)7

6.2.9  Menu.item[x].click. 7

6.2.10  Menu.popup(int x, int y)8

6.3 创建右键菜单... 8

6.4  MenuItem.. 9

6.4.1 new MenuItem(option)9

6.4.2 MenuItem.type. 9

6.4.3  MenuItem.label10

6.4.4  MenuItem.icon. 10

6.4.5 MenuItem.tooltip. 11

6.4.6  MenuItem.checked. 12

6.4.7  MenuItem.enabled. 12

6.4.8  MenuItem.submenu. 12

6.4.9  MenuItem.click. 12

6.6 小结

6.1  Menu 概述

Menu API 提供的是本地化的窗口菜单,即windows下常说的菜单栏,定义的菜单显示在本地化(native)window上,而不是属于DOM文档。参考:node-webkit学习(4)Native UI API 之windowhttp://www.xuanhun521.com/Blog/2014/4/14/node-webkit%E5%AD%A6%E4%B9%A04native-ui-api-%E4%B9%8Bwindow

Menu分为两种,window菜单和上下文(右键)菜单(context menu)。

创建menu对象使用构造函数Menu([option]),如:

// Load native UI library

var gui = require('nw.gui');

// Create an empty menu

var menu = new gui.Menu();

不带参数构造的menu属于context menu,如果想创建window menu,使用如下方式:

var your_menu = new gui.Menu({ type: 'menubar' });

将window menu直接赋值给window 对象的menu属性即可生效。

gui.Window.get().menu = your_menu;

创建menuDemo.html和package.json。menuDemo.html代码如下:

<html>

<head>

<title>menuDemo</title>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

</head>

<body >

<h1>menu api 测试</h1>

<script>

// Load native UI library

var gui = require('nw.gui');

var win = gui.Window.get();

//创建window menu

var windowMenu = new gui.Menu({ type: 'menubar' });

var windowSubmenu = new gui.Menu();

var subMenuItem = new gui.MenuItem({ label: '子菜单项' });

windowSubmenu.append(subMenuItem);

windowMenu.append(

new gui.MenuItem({ label: '子菜单', submenu: windowSubmenu })

);

win.menu = windowMenu;

// Create an empty menu

var menu = new gui.Menu();

// Add some items

menu.append(new gui.MenuItem({ label: 'Item A' }));

menu.append(new gui.MenuItem({ label: 'Item B' }));

menu.append(new gui.MenuItem({ type: 'separator' }));

menu.append(new gui.MenuItem({ label: 'Item C' }));

// Remove one item

menu.removeAt(1);

// Popup as context menu

menu.popup(10, 10);

// Iterate menu's items

for (var i = 0; i < menu.items.length; ++i) {

var element = document.createElement('div');

element.appendChild(document.createTextNode(menu.items[i].label));

document.body.appendChild(element);

}

</script>

</body>

</html>

package.json文件内容如下:

{

"name": "menu-demo",

"main": "menuDemo.html",

"nodejs":true,

"width":100,

"height":200,

"window": {

"title": "MenuDemo",

"toolbar": true,

"width": 800,

"height": 600,

"resizable":true,

"show_in_taskbar":true,

"frame":true,

"kiosk":false

},

"webkit":{

"plugin":true

}

}

运行结果如下:

6.2  menu api

6.2.1  new Menu([option])

构造函数,见上文。

6.2.2  Menu.items

获取该Menu下所有的MenuItem对象,返回结果为数组。上文中的例子,有这样的代码:

for (var i = 0; i < menu.items.length; ++i) {

var element = document.createElement('div');

element.appendChild(document.createTextNode(menu.items[i].label));

document.body.appendChild(element);

}

上面的代码通过menu.items获取所有menuitem对象,遍历输出label。这里需要注意的是,并不是所有的menuitem都有label属性。

6.2.3 Menu.items.length

menuitem的个数。参加上文demo。

6.2.4 Menu.items[i]

通过索引返回一个menuitem对象。

6.2.5  Menu.append(MenuItem item)

向当前菜单中添加一个menuitem对象,该对象在整个menuitem集合的尾部。

6.2.6 Menu.insert(MenuItem item, int i)

在menuitem集合的指定位置插入一个menuitem对象。

6.2.7 Menu.remove(MenuItem item)

从menuitem集合中移除一个menuitem对象。

6.2.8  Menu.removeAt(int i)

删除menuitem集合中指定位置的menuitem对象。

6.2.9  Menu.item[x].click

设置menuitem集合中指定位置的menuitem对象的click事件,在menuDemo.html中添加如下代码:

menu.items[0].click = function() {

var element = document.createElement('div');

element.appendChild(document.createTextNode(‘我被点击了’));

document.body.appendChild(element);

};

结果如下:

点击前

点击后

6.2.10  Menu.popup(int x, int y)

在当前窗口的指定位置弹窗菜单。示例代码见上文。

6.3 创建右键菜单

创建右键菜单,需要在页面监听contextmenu 事件,然后控制弹出菜单。修改之前的菜单弹出代码:

document.body.addEventListener('contextmenu', function (ev) {

ev.preventDefault();

menu.popup(10, 10);

return false;

});

启动时页面如下:

单击右键后,界面显示菜单:

6.4  MenuItem

玄魂的博客

从上面的叙述中,我们已经知道,menu和menuitem的一起组合,才能最终组成界面上的菜单。到目前为止,我们已经基本了解了menuitem的基本使用方法,下面根据api文档,详细介绍属性、方法和事件。

6.4.1 new MenuItem(option)

初始化一个Menuitem对象,其中option是一个对象,包含label, icon, tooltip, type, click, checked, enabled 和 submenu这些字段。这些字段都具有自己的属性,下面分别叙述。

6.4.2 MenuItem.type

获取一个menuitem的类别信息,到目前为止有三类menuitem,分别为separator, checkbox 和normal。

normal和separator类型的menuitem我们都已经在上面的示例中见到,下面我们添加一个checkbox类型的menuitem。

menu.append(new gui.MenuItem({ label: '请选择',type:'checkbox' }));

结果如下:

需要注意的是,type字段只能在初始化时设定,在运行时是不能修改menuitem的类型的。

6.4.3  MenuItem.label

获取或设置menuitem的label值,目前只支持纯文本。

6.4.4  MenuItem.icon

菜单的图标,支持app内部的相对路径和系统路径。sepatater类型的menuitem不支持icon属性。只支持png格式的图片。

修改sumMenuItem,为它添加icon:

var subMenuItem = new gui.MenuItem({ label: '子菜单项', icon: '2655716405282662783.png' });

效果如下:

6.4.5 MenuItem.tooltip

或者或者设置tooltip字段。所谓tooltip就是当鼠标滑动到菜单上显示的文本信息,类似于DOM元素中的title。

下面我们继续修改subMenuItem,为其添加tooltip:

var subMenuItem = new gui.MenuItem({ label: '子菜单项', icon: '2655716405282662783.png',tooltip:'我是帅气的子菜单' });

很不幸,在我的windows 7机器上,tooltip无法显示。在ubuntu上,menubar是显示在全局菜单上,看起来有点怪异:

6.4.6  MenuItem.checked

获取或设置menuitem是否被选中。

6.4.7  MenuItem.enabled

获取或者menuitem的enaled属性,enabled设置为false的menuitem不可被选中。

6.4.8  MenuItem.submenu

获取或者是子菜单。可以参考本文的示例。

6.4.9  MenuItem.click

获取或设置click事件的回调函数。

node-webkit教程<>Native UI API 之Menu(菜单)的更多相关文章

  1. NODE-WEBKIT教程(6)NATIVE UI API 之MENU(菜单)

    node-webkit教程(6)Native UI API 之Menu(菜单) 文/玄魂 目录 node-webkit教程(6)Native UI API 之Menu(菜单) 前言 6.1  Menu ...

  2. NODE-WEBKIT教程(5)NATIVE UI API 之FRAMELESS WINDOW

    node-webkit教程(5)Native UI API 之Frameless window 文/玄魂 原文链接:http://www.xuanhun521.com/Blog/2014/4/15/n ...

  3. node-webkit学习(4)Native UI API 之window

    node-webkit学习(4)Native UI API 之window 文/玄魂 目录 node-webkit学习(4)Native UI API 之window 前言 4.1  window a ...

  4. node-webkit学习(3)Native UI API概览

    node-webkit学习(3)Native UI API概览 文/玄魂 目录 node-webkit学习(3)Native UI API概览 前言 3.1  Native UI api概览 Exte ...

  5. JavaScript强化教程——jQuery UI API 类别

    ---恢复内容开始--- 主要介绍:JavaScript强化教程​—— jQuery UI API 类别 jQuery UI 在jQuery 内置的特效上添加了一些功能.jQuery UI 支持颜色动 ...

  6. 10+ 最佳的 Node.js 教程和实例

    如果你正在找Node.js的学习资料及指南,那么请继续(阅读),我们的教程将会覆盖即时聊天应用.API服务编写.投票问卷应用.人物投票APP.社交授权. Node.js on Raspberry Pi ...

  7. Java JVM、JNI、Native Function Interface、Create New Process Native Function API Analysis

    目录 . JAVA JVM . Java JNI: Java Native Interface . Java Create New Process Native Function API Analys ...

  8. Android4.0 -- UI控件之 Menu 菜单的的使用(一)

      这一讲开始我们来讲一下Android中菜单的使用方法,菜单是应用中的普通的组件,主要是提供友好和专注的用户体验,你可以在你的Activity中使用 Menu APIs 来提供用户动作和其他选项的操 ...

  9. PhantomJS是一个基于WebKit的服务器端JavaScript API

    PhantomJS是一个基于WebKit的服务器端JavaScript API,它基于 BSD开源协议发布.PhantomJS无需浏览器的支持即可实现对Web的支持,且原生支持各种Web标准,如DOM ...

随机推荐

  1. Python模块(MySQLdb)

    MySQLdb模块是python用来连接mysql的第三方模块,安装 pip install mysql-python 连接mysql: 主要两步,建立mysql连接对象.游标对象.再操作数据库 im ...

  2. linux的5个查找命令_转

    转自:http://www.ruanyifeng.com/blog/2009/10/5_ways_to_search_for_files_using_the_terminal.html 在Linux中 ...

  3. python_递归

    1.  递归示例 #coding:utf-8 #递归进行阶乘 def mm(num): if(num == 1): return 1 else: return mm(num-1) * num prin ...

  4. javascript设计模式学习之十四——中介者模式

    一.中介者模式的定义和应用场景 中介者模式的作用在于解除对象之间的紧耦合关系,增加一个中介者之后,所有对象都通过中介者来通信,而不是互相引用,当一个对象发生变化的时候,仅需要通知中介者即可.从而将网状 ...

  5. iOS - (TableView中利用系统的 cell 设置 cell.textlabel 位置和大小)

    今天工作稍微的遇到了一点小小的难题,需求效果中 TableView cell 中的 Label 字体大小比原先系统中的要大些且 Label 位置不是在前面,而是在中间往后,对于这个问题我第一时间也是想 ...

  6. PL/SQL Developer连接到Oracle 12c

    安装32位的Oracle客户端instantclient-basic-nt-12.1.0.1.0.zip 下载地址:http://www.oracle.com/technetwork/topics/w ...

  7. Orchard学习系列-----如何运行的

    感慨:当接触到微软这套程序时,代码实在是太好了,好的几乎都读不懂.很久之前就对这个套开源程序特别感兴趣,但读不明白也让人郁闷. 背景(Orchard官网): 可组装系统的CMS系统,OrChard在运 ...

  8. c# 隐藏 控制台应用程序

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.D ...

  9. [转]easyui data-options的使用

    原文地址:easyui data-options的使用 data-options是jQuery Easyui 最近两个版本才加上的一个特殊属性.通过这个属性,我们可以对easyui组件的实例化可以完全 ...

  10. scrum站立会议------10.20

    小组名称:nice! 小组成员:李权 于淼 杨柳 刘芳芳 项目内容:约跑app(约吧--暂定) 1.任务进度 2.燃尽图