medialize / jquery-context-menu
功能齐全的上下文菜单处理程序,能够处理数千个元素
Requires
This package is not auto-updated.
Last update: 2024-09-14 18:04:12 UTC
README
.contextMenu按需生成DOM元素。
依赖项
- jQuery 1.7(使用新的.on().off()事件API)
- jQuery UI位置(可选但推荐)
用法
从javascript注册contextMenu
$.contextMenu({ // define which elements trigger this menu selector: ".with-cool-menu", // define the elements of the menu items: { foo: {name: "Foo", callback: function(key, opt){ alert("Foo!"); }}, bar: {name: "Bar", callback: function(key, opt){ alert("Bar!") }} } // there's more, have a look at the demos and docs... });
查看演示。
HTML5 兼容性
Firefox 8实现了使用<menuitem>标签的contextmenu。然而,规范指出应该使用<command>标签。$.contextMenu接受两者。
Firefox 8尚未完全实现contextmenu规范(问题单#617528)。元素a、button、input和option作为命令的使用被完全忽略。它也没有(从视觉上)区分复选框/单选框和常规命令(问题单#705292)。
注意:尽管规范指出应该将<option>渲染为常规命令,但$.contextMenu会实际渲染一个<select>。从HTML5 <menu>导入contextMenu
$.contextMenu("html5");
交互原则
您当然可以使用鼠标使用上下文菜单。一旦打开,您也可以使用键盘(完全)导航它。
- ↑(上)列表中的上一项,会跳过禁用元素并循环
- ↓(下)列表中的下一项,会跳过禁用元素并循环
- →(右)进入子菜单
- ←(左)从子菜单升起
- ↵(回车)调用命令
- ⇥(制表符)下一个项目或输入元素,会跳过禁用元素并循环
- ⇪ ⇥(Shift制表符)上一个项目或输入元素,会跳过禁用元素并循环
- ⎋(Esc)关闭菜单
- ⌴(空格)捕获并忽略以避免页面滚动(与原生菜单保持一致)
- ⇞(Page Up)捕获并忽略以避免页面滚动(与原生菜单保持一致)
- ⇟(Page Down)捕获并忽略以避免页面滚动(与原生菜单保持一致)
- ↖(Home)列表中的第一项,会跳过禁用元素
- ↘(End)列表中的最后一项,会跳过禁用元素
除了显而易见的之外,浏览器还会对字母数字按键输入做出反应。在上下文菜单中按 r 键会使 Firefox(8)立即重新加载页面。Chrome 会选择查看页面信息,Safari 会选择打印文档。很酷,对吧?直到在 Windows 上尝试相同的操作之前,我都没有意识到浏览器正在使用访问键来处理这个问题。我本想输入某个东西的第一个字符,比如“s”代表“保存”,然后遍历所有以“s”开头的命令。但那只是我——我对用户体验了解多少?无论如何,$.contextMenu 现在也支持访问键处理。
压缩
// ==ClosureCompiler==
// @compilation_level SIMPLE_OPTIMIZATIONS
// @output_file_name contextMenu.js
// @code_url http://medialize.github.com/jQuery-contextMenu/jquery-1.8.2.min.js
// @code_url http://medialize.github.com/jQuery-contextMenu/src/jquery.ui.position.js
// @code_url http://medialize.github.com/jQuery-contextMenu/src/jquery.contextMenu.js
// ==/ClosureCompiler==
作者
- Rodney Rehm
- Christiaan Baartse(每个菜单单个回调)
- Addy Osmani(与 Firefox 8 中原生上下文菜单的兼容性)
许可证
$.contextMenu 在 MIT 许可证 或 GPL v3 下发布——哪个更适合您的需求。
变更日志
1.6.7(2015年5月21日)
- 寻找维护者说明
- 发布到 npm
1.6.6(2014年7月12日)
- 修复 bower 清单
1.6.5(2013年1月20日)
- 修复“打开第二个菜单会破坏层”的问题 - (问题 #105)
1.6.4(2013年1月19日)
- 再次修复 jQuery 插件清单,是的,我就是这种人。:(
1.6.3(2013年1月19日)
- 修复 jQuery 插件清单
1.6.2(2013年1月19日)
- 修复 1.6.1 中引入的“菜单不会关闭”的回归问题
1.6.1(2013年1月19日)
- 修复潜在的 HTML 解析问题
- 升级到 jQuery UI 位置 v1.10.0
- 将
CRLF替换为LF(不知道最初是如何发生的...) - 添加
options.reposition以允许/禁止简单地重新定位菜单而不是重新构建它(问题 #104)
1.6.0(2012年12月29日)
- 添加 绑定到 DOM 元素的上下文菜单 - (问题 88)
- 添加类
context-menu-active以定义活动触发元素的状态 - (问题 92) - 添加 TouchSwipe 激活演示
- 添加内部函数和事件处理程序的导出 - (问题 101)
- 修复键 "watch" 可能会在回调映射中翻译为 Object.prototype.watch 的问题 - (问题 93)
- 修复菜单和子菜单宽度计算 - (问题 18)
- 修复未使用的变量 - (问题 100)
- 修复 iOS "click" 兼容性问题 - (问题 83)
- 修复分隔符不可点击的问题 - (问题 85)
- 修复与固定定位触发器相关的问题(问题 95)
- 修复单词换行问题 - (问题 80)
1.5.25 (2012年10月8日)
1.5.24 (2012年8月30日)
- 将上下文菜单选项添加到输入命令事件(问题 72,dtex)
- JSLint的代码美化
1.5.23 (2012年8月22日)
1.5.22 (2012年7月16日)
- 修复动画和隐藏时删除的问题(问题 #64)
1.5.21 (2012年7月14日)
- 修复销毁时背景不会删除的问题(问题 #63)
1.5.20 (2012年6月26日)
注意:版本标签为v1.6.20?!
- 修复IE6中背景定位不正确的问题(问题 #59)
- 修复Chrome / Safari中嵌套的输入元素不可访问的问题(问题 #58)
1.5.19
注意:版本标签缺失...?!
- 修复当
$.ui.position不可用时子菜单定位问题(问题 #56)
1.5.18
注意:版本标签缺失...?!
- 修复HTML5
<menu>导入(问题 #53)
1.5.17 (2012年6月4日)
- 修复默认为
options.trigger = "right"的问题 - 修复变量名拼写错误(在问题 #51 中)
- 修复打开其他菜单时菜单不会关闭的问题(在问题 #51 中)
- 添加Firefox 12中
contextmenu错误的解决方案(在问题 #51 中)
1.5.16 (2012年5月29日)
- 在CSS中添加了供应商前缀的用户选择
- 修复使用
<body>作为触发时z-index排序的问题(问题 #49)
1.5.15 (2012年5月26日)
- 允许在显示菜单时直接打开另一个元素的菜单(问题 #48)
- 修复自动隐藏选项,菜单无法正确隐藏
1.5.14 (2012年5月22日)
- options.build()会破坏默认选项(问题 #47)
- $.contextMenu('destroy')不会删除背景
1.5.13 (2012年5月4日)
- 将$trigger暴露给动态构建的自定义菜单项类型(问题 #42)
- 修复打开菜单的重新定位问题(以前是意外重新打开)
- 添加异步示例
- 弃用ignoreRightClick,改为检测正确的事件类型
1.5.12 (2012年5月2日)
- 防止在点击子菜单项时调用子菜单的第一个项目的回调函数(问题 #41)
1.5.11 (2012年4月27日)
- 提供
opt.$trigger到显示事件(问题 #39)
1.5.10 (2012年4月21日)
- ignoreRightClick无法防止菜单已打开时的右键点击(问题 #38)
1.5.9 (2012年3月10日)
- 如果build()没有返回任何项,则显示空菜单(问题 #33)
1.5.8 (2012年1月28日)
- 捕获Page Up和Page Down键,像空格一样忽略(问题 #30)
- 添加Home / End键以跳转到菜单的第一个/最后一个命令(问题 #29)
- 在中按Enter键会引发错误(问题 #28)
1.5.7 (2012年1月21日)
- 非ASCII字符在jquery.contextMenu.js中导致Rails兼容性问题(问题 #27)
1.5.6 (2012年1月8日)
- bug:contextmenu事件未传递给build()回调(问题 #24)
- bug:Safari和Chrome中子菜单标记不会正确显示(问题 #25)
1.5.5 (2012年1月6日)
- bug:在给输入元素焦点时,Internet Explorer不会关闭菜单(问题 #23)
1.5.4 (2012年1月5日)
- bug:未设置子菜单的z-index可能导致子菜单无法正确重叠主菜单(问题 #22)
1.5.3 (2012年1月1日)
- bug:
console.log is undefined
1.5.2 (2012年12月25日)
- bug:子菜单无法正确更新其禁用状态(问题 #16)[再次...]
- bug:子菜单无法根据min-width和max-width正确调整宽度(问题 #18)
1.5.1 (2011年12月18日)
- 子菜单不会正确更新其禁用状态(问题编号 #16)
1.5(2011年12月13日)
- 添加了动态菜单创建(问题编号 #15)
1.4.4(2011年12月12日)
- 当触发元素为
position:fixed时,
1.4.3(2011年12月11日)
- 当菜单可见时,按键处理程序会捕获所有按键(基本上禁用了F5等)
1.4.2(2011年12月6日)
- 问题:禁用回调函数中不可用opt.$trigger
- jQuery升级到1.7.1
1.4.1(2011年11月9日)
- 问题:当
1.4(2011年11月7日)
- 升级到jQuery 1.7(更改了依赖!)
- 添加了内部事件
contextmenu:focus、contextmenu:blur和contextmenu:hide - 添加了自定义
类型 - 问题:在
1.3(2011年9月5日)
- 添加了对快捷键的支持
- 问题:两个子菜单可以同时打开
1.2.2(2011年8月24日)
- HTML5导入中的问题
1.2.1(2011年8月24日)
- HTML5检测中的问题
1.2(2011年8月24日)
- 为Firefox 8添加了对
- 升级到jQuery 1.6.2
1.1(2011年8月11日)
- 问题 #1 HTML5操作传递的TypeError
- 问题 #2 禁用回调函数未正确调用
- 特性 #3 悬停触发器的自动隐藏选项
- 特性 #4 选项:使用单个回调函数对所有命令进行操作,而不是为每个项目注册相同的函数
- 对于非右键触发器,忽略右键点击(原始"右键菜单"事件触发器)
1.0(2011年7月7日)
- 初始$.contextMenu处理程序