配置式菜单与右键菜单
用一个数组描述菜单,再挂到按钮或区域上:分组标题、分隔线、图标、快捷键提示、复选项、单选项、危险项、禁用项、多级子菜单。同一份数组也能做右键菜单。固定写在 HTML 里的简单菜单用「下拉菜单」(data-zh-dropdown)更省事。
带行为 核心包 3 个方法
示例
代码
<div class="zh-row">
<button class="zh-btn" id="mn-btn">文件 <i data-i="chevron-down"></i></button>
<div id="mn-area" class="zh-card" style="padding:16px">在这里点右键</div>
</div>
<script>
var items = [
{ type: 'group', label: '文件' },
{ label: '重命名', icon: 'pencil', shortcut: 'F2' },
{ label: '移动到', icon: 'folder-open', sub: [{ label: '我的文档' }, { label: '项目归档' }] },
{ type: 'sep' },
{ type: 'check', label: '显示隐藏文件', checked: true },
{ type: 'sep' },
{ label: '删除', icon: 'trash-2', danger: true }
];
ZhaoUI.menu(document.getElementById('mn-btn'), items, { label: '文件操作', onSelect: function (it) { ZhaoUI.message('选择了:' + it.label); } });
ZhaoUI.contextMenu(document.getElementById('mn-area'), items);
</script>方法
ZhaoUI.menu(button, items, options):点击按钮打开菜单,返回弹出层句柄(open、close、toggle、isOpen)。options:placement(默认 bottom-start)、label(菜单的 aria-label)、onSelect(item)、onClose()、trigger(click 默认,manual 则自己调用 open)ZhaoUI.contextMenu(area, items, options):在区域上右键、按 Shift+F10 或菜单键时,在鼠标处(或区域中心)打开菜单。区域会自动可聚焦。options:label、onSelect(item)菜单项 item:type 取 'sep'(分隔线)、'group'(分组标题,label 为标题)、'check'(复选,点击切换 checked,菜单保持打开)、'radio'(同一 name 的单选,菜单保持打开);普通项点击后触发 onSelect 并关闭;sub 是子菜单数组
样式类
zh-dd-menu zh-dd-item zh-dd-group zh-dd-sep zh-dd-lead zh-dd-label zh-dd-kbd zh-dd-caret
无障碍
- role=menu,项为 menuitem / menuitemcheckbox / menuitemradio,复选与单选带 aria-checked
- 键盘:↑↓ 移动,输入首字母跳转,→ 进入子菜单,← 回到上一级,Esc 关闭并回到触发按钮,右键菜单关闭后焦点回到区域
- 打开后第一项自动获得焦点;按钮上按 ↑ 会从最后一项开始
- 右键菜单只是快捷方式,所有操作也要能在页面里用按钮完成
常见问题
配置式菜单与右键菜单是什么?
用一个数组描述菜单,再挂到按钮或区域上:分组标题、分隔线、图标、快捷键提示、复选项、单选项、危险项、禁用项、多级子菜单。同一份数组也能做右键菜单。固定写在 HTML 里的简单菜单用「下拉菜单」(data-zh-dropdown)更省事。
怎么使用配置式菜单与右键菜单?
先在页面里引入 zhaoui.css 和 zhaoui.js(放在 </body> 前,不加 defer),再照本页「用法」里的标记书写;需要用代码控制时,用「方法」里列出的接口。
配置式菜单与右键菜单有哪些方法?
ZhaoUI.menu(button, items, options):点击按钮打开菜单,返回弹出层句柄(open、close、toggle、isOpen)。options:placement(默认 bottom-start)、label(菜单的 aria-label)、onSelect(item)、onClose()、trigger(click 默认,manual 则自己调用 open);ZhaoUI.contextMenu(area, items, options):在区域上右键、按 Shift+F10 或菜单键时,在鼠标处(或区域中心)打开菜单。区域会自动可聚焦。options:label、onSelect(item);菜单项 item:type 取 'sep'(分隔线)、'group'(分组标题,label 为标题)、'check'(复选,点击切换 checked,菜单保持打开)、'radio'(同一 name 的单选,菜单保持打开);普通项点击后触发 onSelect 并关闭;sub 是子菜单数组。
配置式菜单与右键菜单支持键盘和读屏吗?
role=menu,项为 menuitem / menuitemcheckbox / menuitemradio,复选与单选带 aria-checked;键盘:↑↓ 移动,输入首字母跳转,→ 进入子菜单,← 回到上一级,Esc 关闭并回到触发按钮,右键菜单关闭后焦点回到区域;打开后第一项自动获得焦点;按钮上按 ↑ 会从最后一项开始。
配置式菜单与右键菜单需要依赖框架吗?
不需要。ZhaoUI 是原生 HTML、CSS 和 JavaScript,不依赖 jQuery、Vue 或 React。