我在 SVG 画布对象上实现上下文菜单:
onContextMenu:function (x, y) {
$('#contextMenuBase').remove();
$('#canvas').append('<div id="contextMenuBase"' +
'style="position: absolute; height:1px; width:1px; left: ' + x + 'px; top: ' + y + 'px; "></div>');
$.contextMenu({
selector:'#contextMenuBase',
events:{
hide:function () {
$('#contextMenuBase').remove();
$.contextMenu('destroy');
}
},
callback:$.proxy(function (key, options) {
switch (key) {
case "delete_figure":
this.setColor("ff0000");
break;
case "delete_table":
this.setColor("00ff00");
break;
default:
break;
}
}, this),
x:0,
y:0,
items:{
delete_figure:{name:"Delete Figure"},
delete_table:{name:"Delete Table"}
}
});
}
SVG 元素不能用选择器引用,所以我在指针位置创建了 1 像素 div 并使用它和触发对象。当用户单击外部菜单时,它会被破坏。
我只有一个挑战。如果两个对象有上下文菜单,我首先右键单击,然后右键单击第二个,第一个上下文菜单应该消失,第二个 - 出现。但在我的情况下,调用 hide() 方法,第一个菜单被破坏,但画布没有收到右键单击事件,因此不会创建第二个菜单。
如何解决?
谢谢,鲍里斯。