intelogie / jquery-contextmenu
This package is auto-updated.
Last update: 2024-08-29 04:40:04 UTC
README
重要:已发布2.0.0版本,已更改图标类的默认名称,以避免与定义类 'icon' 的框架发生CSS冲突。
.contextMenu根据需要生成DOM元素。
依赖关系
- jQuery >=1.8.2
- 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 tab) 前一个项目或输入元素,将跳过禁用元素并循环
- ⎋ (Esc) 关闭菜单
- ⌴ (空格) 捕获并忽略以避免页面滚动(与原生菜单保持一致)
- ⇞ (页上) 捕获并忽略以避免页面滚动(与原生菜单保持一致)
- ⇟ (页下) 捕获并忽略以避免页面滚动(与原生菜单保持一致)
- ↖ (Home) 列表中的第一项,将跳过禁用元素
- ↘ (End) 列表中的最后一项,将跳过禁用元素
除了明显的操作,浏览器还会对字母数字键的敲击做出反应。在上下文菜单中按 r
键会使 Firefox (8) 立即重新加载页面。Chrome 选择查看页面信息,Safari 选择打印文档。很酷,对吧?直到在 Windows 上尝试相同的操作,我才意识到浏览器使用访问键来处理。我更希望输入某个东西的第一个字符,比如“s”代表“保存”,然后遍历以“s”开头的所有命令。但这只是我个人的想法——我对用户体验了解多少?无论如何,$.contextMenu 现在也支持访问键处理。
作者
- Björn Brala
- Rodney Rehm(原始创建者)
- Christiaan Baartse(每个菜单单次回调)
- Addy Osmani(与 Firefox 8 中原生上下文菜单的兼容性)
许可证
$.contextMenu 在 MIT 许可证 下发布
特别感谢
Font-Awesome 图标来自 encharm/Font-Awesome-SVG-PNG。
更新日志
2.2.3
修复
- 回调现在从菜单项所在的上下文中调用(如子菜单)。目前,只有当项不在子菜单中时,它们才会覆盖根回调,这样回调总是正确的。不幸的是,这也意味着如果任何地方使用相同的键,回调选项仍然不完整。这不容易修复。问题 #413。
2.2.1
新增
- 'cm_seperator' 类型的别名:'cm_separator'(感谢 @nelson6e65)
更改
- 删除了旧的集成测试,构建它们的框架已被放弃。
- 在 TravisCI 中启用 jQuery 3 测试
修复
- 修复了 jQuery 3 支持,这是由于 jQuery UI(修复 #407)的结果
- 在使用 opt.$menu 和 root.$menu 之前添加了对 null 的检查。修复 #352(感谢 @andreasrosdal)
- 悬停时对颜色或
input
选项的小修复
文档
- 为 cm_seperator 添加了文档(感谢 @nelson6e65)
- 修复了项目选项文档中的拼写错误(感谢 @nelson6e65)
- 修复了动画:fadeOut 中的拼写错误(感谢 @avi-meslati-sp)
- 修复了文档代码中的拼写错误:
show
被使用了两次(感谢 @kgeorgiou) - 修复了异步文档
2.2.0
新增
- 添加了将项目标题作为 HTML 显示的选项(感谢 @brassard)
- 完整的 Font Awesome 支持
更改
- 使用相对单位修复 CSS(感谢 @RoachMech)(问题 #386)
- 将 CSS 中的 Unicode 字符更改为可读的字符串。
- 改进了项目样式(感谢 @anseki)
修复
- 在某些 Windows 机器上强制创建 woff2 字体。
- 修复了禁用项无法再获得焦点的问题(感谢 @anseki)
- 修复了菜单尺寸计算,确保没有项再占用两行(感谢 @anseki)
- 修复了 bower.json(感谢 @nelson6e65)
- 修复了“位置”和“构建”回调文档中的拼写错误(感谢 @mmcev106)
2.1.1
- 修复了使用带有自定义参数的 open 函数时的问题(感谢 @RareDevil)
- 重新打开菜单时增加
width
,通过使用 outerwidth 来计算宽度。修复 #360(感谢 @anseki) - 当关闭菜单时,子菜单不会折叠,修复 #358(感谢 @anseki)
- 在通过键盘滚动项时,添加了小的延迟,以防止由于一像素或两像素的误差而错过菜单。修复 #347(感谢 @Risord)
- 在滚动项时检查项是否以任何方式隐藏。修复 #348
- 将链接和文档的基本 URL 更改为 https,如 @OmgImAlexis 在 PR#345 中所述
2.1.0
- 在选项对象中添加了对将函数作为 zIndex 值的支持(感谢 @eivindga)
- 修复了切换到正确类型的分隔符(感谢 @RareDevil)
- 修复了子菜单尺寸错误的问题(问题 #308)(感谢 @RareDevil)
- package.json 中的条目不正确(问题 #336)(感谢 @Dijir)
- 将禁用图标以及文本变为灰色(问题 #337)(感谢 @r02b)
- 优化了生成的 CSS,以便可以使用
context-menu-icon
类覆盖图标 CSS。 - 使用 appendTo 时 contextmenu 的定位(感谢 @mrMarco)
- 在键盘事件处理器中检查目标是否具有比 contextmenu 更高的 zIndex(感谢 @RareDevil)
2.0.1(2015年12月3日)
- 从 jquery.contextMenu.js 中移除了可执行位(感谢 @jacknagel)
- 修复了使用函数作为图标时的问题(感谢 @RareDevil)
- 修复了子菜单尺寸错误的问题(感谢 @RareDevil)
- 修复了 contextmenu 会打开另一个菜单的问题(感谢 @RareDevil) - (问题 #252 和 问题 #293)
- 修复了节点名称未附加到输入元素标签的问题。(感谢 @RareDevil)
- 添加检查以确定 root.$layer 是否存在,以防止在定义的对象上调用 hide()。(感谢 @andreasrosdal)
2.0.0(2015年10月28日)
- 本版本更改了图标类的默认名称,以防止与定义了 'icon' 类的框架发生 CSS 冲突。为了保持图标名称与更改之前相同,您可以更改图标类名的默认设置(关于 classNames 选项的文档)。类名可能将是 "context-menu-icon-",这是之前由 @rodneyrehm 提出的。
- 您不能使用 SASS 来自定义您的 contextmenu。gulp 命令 build-icons 从 src/icons 中获取所有 SVG 图标并将它们构建成一个字体。为此,我们需要打破向下兼容性。这意味着新的 CSS 没有定义旧的 .icon 类,这使得它在 CSS 框架中更加稳定。文档的第一版可以在这里找到。
- 1.x 分支将保持一段时间,以便进行错误修复。但将在未来几个月内停止对 1.x 的支持。
- 撤销了 1.7.0 中的更改:.html() 恢复为 .text(),因为这是一个安全问题(感谢 @arai-a)
1.10.1(2015年10月25日)
- 添加了 gulp 命令(integration-test-paths)以在文档生成器覆盖后更改集成测试中的路径(感谢 @arai-a)
- 确保 contextmenu 不在客户端区域外(感谢 @arai-a)
- 更新 jQuery 依赖项,以避免使用 npm 时重复安装 jQuery(感谢 @fredericlb)
1.9.1(2015年10月11日)
- 修复了 classNames 选项在子菜单上失败的问题
- 新增文档网站和生成使用 couscous
1.9.0(2015年10月1日)
- 使类可配置,以避免容易发生冲突。请参阅关于 classNames 选项的文档。这还准备了将类名更改为非冲突默认值,以便与如 bootstrap 这样的框架停止麻烦。
- 修复了处理分隔字符串的问题。它在 String.$node 的受保护属性上抛出了错误
- 修复了在坐标 0,0 打开 contextmenu 的问题(由 Andreme 完成)
- 修复了 jQuery UI 检查(问题 #182)
- 更新了图标函数的参数文档
1.8.1(2015年9月14日)
- 更新了 readme。
- 更新了dist文件
1.8.0(2015年9月14日)- dist文件未更新!
- 添加了包含编译后的JS和CSS的dist文件夹,并将这些文件添加到包和bower配置中。
- 修复了jQuery UI位置文档链接(问题 #274)
- 项目图标现在可以是一个回调函数,用于动态决定图标类。 - (问题 #158,问题 #129,问题 #151,问题 #249)
- 对存在填充时屏幕边缘的宽度和高度计算进行了小幅度修复。
1.7.0(2015年8月29日)
- 触摸支持优化(由kccarter76提供)
- 将.text更改为.html,以避免额外的span固定 - (问题 #252)
- 在项目定义中添加了可见性回调函数
- 在从HTML5元素创建时,复制HTML5图标属性
- 修复了多次打开时菜单增长的问题 - (问题 #197)
- 修复了测试无法运行的问题
1.6.8(2015年8月18日)
- 为新维护者进行更改
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日)
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)
- 添加了class
context-menu-active
以定义活动触发元素上的状态(问题 92) - 添加了TouchSwipe激活的示例
- 导出内部函数和事件处理器 - (问题 101)
- 修复了键“watch”可能在回调映射中翻译为Object.prototype.watch的问题(问题 93)
- 修复了菜单和子菜单宽度的计算 - (问题 18)
- 修复了未使用变量 - (问题 100)
- 修复iOS "点击" 兼容性问题 - (问题 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"
的options
- 修复问题 #51 中的变量名拼写错误
- 修复打开其他菜单时菜单不会关闭的问题 (问题 #51)
- 为Firefox 12的
contextmenu
-bug 添加解决方法 (问题 #51)
1.5.16 (2012年5月29日)
- 在CSS中添加了供应商前缀的用户选择
- 修复当使用
<body>
作为触发器时的z-indexing问题 (问题 #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)
- 修复打开菜单的重新定位问题(以前是意外重新打开)
- 添加异步示例
- 用正确的事件类型检测代替忽略右键点击
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日)
- 在 jquery.contextMenu.js 中的非ASCII字符会导致Rails中的兼容性问题 (问题 #27)
1.5.6 (2012年1月8日)
- 错误:contextmenu 事件未传递给 build() 回调(问题 #24)
- 错误:在 Safari 和 Chrome 中子菜单标记无法正确显示(问题 #25)
1.5.5(2012年1月6日)
- 错误:当给输入元素焦点时,Internet Explorer 无法关闭菜单(问题 #23)
1.5.4(2012年1月5日)
- 错误:未设置子菜单的 z-index,可能导致子菜单无法正确重叠主菜单(问题 #22)
1.5.3(2012年1月1日)
- 错误:console.log 未定义
1.5.2(2012年12月25日)
- 错误:子菜单无法正确更新其禁用状态(问题 #16)[再次…]
- 错误:子菜单无法根据 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
时,定位 <menu>(问题 #14)
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日)
- 错误:<menu> 导入不会正确传递操作(点击事件)
1.4(2011年11月7日)
- 升级到 jQuery 1.7(更改了依赖!)
- 添加了内部事件
contextmenu:focus
、contextmenu:blur
和contextmenu:hide
- 添加了自定义 <command> 类型
- 错误:在 <menu> 上没有正确设置
className
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 添加了对 <menuitem> 的兼容性
- 升级到 jQuery 1.6.2
1.1(2011年8月11日)
- 错误 #1 HTML5 动作传递的 TypeError
- 错误 #2 禁用回调未正确调用
- 特性 #3 鼠标悬停触发器的自动隐藏选项
- 特性 #4 选项:对于所有命令使用单个回调,而不是为每个项目注册相同的函数
- 选项:忽略非右键触发的右键单击(原始 "contextmenu" 事件触发)
1.0(2011年7月7日)
- 初始 $.contextMenu 处理程序