索引
ht.widget.Menu
可以为页面增加标准菜单,由一个列表ul
和ContextMenu
组成,借助ContextMenu
可以实现任意层次子菜单,
图片ICON
,Check
多选,Radio
单选,禁用菜单项以及自定义菜单样式等功能,ContextMenu
的详细介绍可以参考其文档。
在正式使用API
之前,您的页面里应该引入相关的js
文件:
<script src="ht.js"></script> <!--先引入ht.js-->
<script src="key.js"></script> <!--快捷键常量,可以按需引入-->
<script src="ht-contextmenu.js"></script> <!--依赖contextmenu-->
<script src="ht-menu.js"></script>
Menu
提供的API
如下:
setItems(json)
设置菜单项,参数为JSON
对象setLayout(layout)
设置布局方式,largeicons
表示大图标模式,smallicons
表示小图标模式,iconsonly
表示仅图标模式setHeaderItemHGap()
设置根菜单项的水平间隔,默认为0,改变layout
时可以调整此参数以达到最好的展示效果setHeaderItemVGap()
设置根菜单项的垂直间隔,默认为0,改变layout
时可以调整此参数以达到最好的展示效果setHeaderItemAlign()
设置根菜单项的对齐方式,默认为left
,改变layout
时可以调整此参数以达到最好的展示效果addTo(dom)
参数为HTML
元素,将菜单作为其child
dispose()
销毁此菜单enableGlobalKey()
启用全局快捷键,一旦启用此选项,菜单不再使用时需要显式调用dispose()
销毁菜单disableGlobalKey()
禁用全局快捷键setHoverBackground(color)
设置鼠标划过根菜单时的背景色setHoverColor(color)
设置鼠标划过根菜单时的文字颜色showDropdownMenu(index)
显示下拉菜单,参数为根菜单项的index
,如要显示第一个根菜单项的下拉菜单,可以调用showDropdownMenu(0)
hideDropdownMenu()
隐藏下拉菜单getItemByProperty(property, value)
查找属性名为property
,值为value
的菜单项,只返回第一个查找结果,注意:如果菜单显示时修改此查找结果,则菜单界面在下次显示时更新getShowingMenuIndex()
获得当前显示下拉菜单的根菜单项的index
,如果没有显示下拉菜单返回-1
菜单的内容由一个固定格式的JSON
对象描述,包括菜单项的文字,图片以及相应的动作,下面的JSON
描述了一个典型菜单:
var json = [
{
label: "File", //菜单文字
items: [
{
label: "New...",
icon: iconSrc, //菜单图片ICON
action: function(item) { //回调函数
alert(item.label);
}
},
{
label: "Open...",
icon: iconSrc,
suffix: "Ctrl+O", //在菜单上显示的提示文字
key: [Key.ctrl, Key.o], //实际响应的快捷键
action: function(item) {
alert("you clicked:" + item.label + ",this=" + this);
},
scope: "hello" //指定回调函数中的this
},
{
label: "Disabled",
icon: iconSrc,
disabled: true //禁用菜单项
},
"separator", //分割线
{
label: "More...",
icon: iconSrc,
type: "check", //可多选的菜单项
items: [
{
label: "AAAA"
},
{
label: "BBBB"
},
{
label: "CCCC"
}
]
}
]
},
{
label: "Edit",
items:[
{
label: "Copy",
icon: iconSrc
},
{
label: "Paste",
icon: iconSrc
}
]
},
{
label: "CheckMenuItems",
items: [
{
label: "Check1",
icon: iconSrc,
type: "check"
},
{
label: "Check2",
icon: iconSrc,
type: "check"
},
{
label: "Check3",
icon: iconSrc,
type: "check",
items: [
{
label: "AAAA"
},
{
label: "BBBB"
},
{
label: "CCCC"
}
]
}
],
action: function(item) {
alert("you clicked:" + item.label + ",this=" + this);
}
},
{
label: "RadioMenuItems",
action: function(item,event) {
alert("you clicked:" + item.label);
},
items: [
{
label: "Radio1",
icon: iconSrc,
type: "radio",//单选菜单项
groupId: 1 //菜单项分组
},
{
label: "Radio2",
icon: iconSrc,
type: "radio",
groupId: 1
},
{
label: "Radio3",
icon: iconSrc,
type: "radio",
groupId: 1,
items: [
{
label: "AAAA"
},
{
label: "BBBB"
},
{
label: "CCCC"
}
]
}
]
},
{
label: "TestMenu",
icon: iconSrc,
action: function(item) {
alert(item.label);
},
items: [
{
label: "Homepage",
href: "http://wtsoftware.cn", //超链到某个URL
linkTarget: "_blank", //超链目标,默认_self
key: [Key.meta, Key.enter], //实际响应的快捷键
suffix: "Command+Enter", //在菜单上显示的提示文字
preventDefault: false //是否阻止快捷键默认的行为,默认为true
},
{
label: "submenu",
action: function(item) {
alert(item.label);
}
}
]
}
];
这个JSON
对象渲染出来的菜单见下例:
和右键菜单类似,菜单支持通过全局的htconfig
配置风格样式,可配置的参数如下:
menuLabelFont
菜单文字字体,默认为(isTouchable ? '16' : '13') + 'px arial, sans-serif'
,menuLabelColor
菜单文字颜色,默认为#000
,menuBackground
菜单背景色,默认为#F0EFEE
menuHoverBackground
鼠标划过菜单项时的背景颜色,默认为#648BFE
menuHoverLabelColor
鼠标划过菜单项时的文字颜色,默认为#fff
menuSeparatorWidth
菜单底部分割线的宽度,默认为1
menuSeparatorColor
菜单底部分割线的颜色,默认为#999
除了htconfig
对象,也可以使用css
覆盖默认的风格,请参考下面的例子:
通常下拉菜单通过点击触发显示即可,除此之外,Menu
也支持通过API
控制显示和隐藏下拉菜单:
<input type="button" value="Show" onclick="window.menu.showDropdownMenu(document.getElementById('txt').value);">
<input type="button" value="Hide" onclick="window.menu.hideDropdownMenu();">
<input type="button" value="PrintIndex" onmousedown="alert(window.menu.getShowingMenuIndex());">
通俗来说,单页应用是让用户在一个页面中完成所有的操作,它的介绍可以参考这里:Single-page application, 对于一个附带标准菜单的应用,通常需要将菜单放置到页面顶部,然后用其它组件填满剩下的区域,我们接下来模拟这样的功能: