jQuery - 右键菜单插件contextMenu使用详解3(菜单触发方式、菜单事件)
七、修改菜单打开的触发方式
默认情况下点击右键即可显示菜单,我们可以通过 trigger 配置将其修改成其它的触发方式。
1,左键触发
只要将 trigger 配置成 left,那么只有点击左键才会显示菜单(右键不出现)。

<button class="context-menu-one">按钮1</button> <script type="text/javascript"> $(function() { //初始化菜单 $.contextMenu({ selector: '.context-menu-one', trigger: 'left', callback: function(key, options) { console.log("点击了:" + key); }, items: { "edit": {name: "编辑", icon: "edit"}, } }); }); </script>
2,悬停触发
如果将 trigger 设置成 hover,那么当鼠标移动到触发对象上时就会显示菜单。同时该模式通常会配合如下两个属性使用:
- delay:悬停多长时间才出现菜单
- autoHide:鼠标移出触发对象时自动隐藏菜单。
下面代码实现当鼠标移动到按钮上,停留 500 毫秒后自动出现菜单。鼠标从按钮上移开时又自动关闭菜单。
<button class="context-menu-one">按钮1</button> <script type="text/javascript"> $(function() { //初始化菜单 $.contextMenu({ selector: '.context-menu-one', trigger: 'hover', delay: 500, autoHide: true, callback: function(key, options) { console.log("点击了:" + key); }, items: { "edit": {name: "编辑", icon: "edit"}, } }); }); </script>
3,通过代码触发(自定义触发方式)
如果将 trigger 设置成 none,那么在触发对象上不管左键还是右键点击都不会显示菜单。不过我们可以通过代码手动触发菜单打开。
下面样例我们点击“按钮1”,会在“按钮2”上打开菜单。

<button class="context-menu-one">按钮1</button> <br><br> <button class="context-menu-two">按钮2</button> <script type="text/javascript"> $(function() { //初始化菜单 $.contextMenu({ selector: '.context-menu-two', callback: function(key, options) { console.log("点击了:" + key); }, items: { "edit": {name: "编辑", icon: "edit"}, } }); //按钮1点击 $('.context-menu-one').on('click', function(e) { e.preventDefault(); //触发按钮2的菜单 $('.context-menu-two').contextMenu(); }); }); </script>
上面手动触发的代码也可以这么写:
$('.context-menu-two').trigger("contextmenu");
当然也可以同时指定菜单出现的位置:

//菜单显示在整个页面的(100,0)位置 $('.context-menu-two').contextMenu({x: 100, y: 0});
4,异步菜单
下面代码仍然是通过代码打开菜单。只不过鼠标移动到按钮上,停留 1 秒后才自动出现菜单。
<button class="context-menu-one">按钮1</button> <script type="text/javascript"> $(function() { //初始化菜单 $.contextMenu({ selector: '.context-menu-one', trigger: 'none', callback: function(key, options) { console.log("点击了:" + key); }, items: { "edit": {name: "编辑", icon: "edit"}, } }); //鼠标移入事件 $('.context-menu-one').on('mouseover', function(e){ var $this = $(this); var _offset = $this.offset(), position = { x: _offset.left + 10, y: _offset.top + 10 } setTimeout(function(){ $this.contextMenu(position); }, 1000); }); }); </script>
八、菜单打开/关闭事件
通过 events 节点可以配置菜单的相关事件响应。比如我们想在菜单打开的时候自动做一些事情,或者关闭的时候做一些事情,都可以在这里实现。events 中可以配置如下方法:
- show:菜单显示前会被调用(如果该方法返回 false,则会阻止菜单的显示)
- hide:菜单关闭前会被调用(如果该方法返回 false,则会阻止菜单的关闭)
1,效果图
我们右键打开菜单,然后点击一个菜单项,菜单自动关闭。整个流程控制台输出如下:

2,样例代码
<button class="context-menu-one">按钮1</button> <script type="text/javascript"> $(function() { //初始化菜单 $.contextMenu({ selector: '.context-menu-one', callback: function(key, options) { console.log("点击了:" + key); }, items: { "edit": {name: "编辑", icon: "edit"}, }, events: { show: function(opt) { console.log("菜单打开了。"); }, hide: function(opt) { console.log("菜单关闭了。"); } } }); }); </script>