Отображение настраиваемого контекстного меню при щелчке фигур (объектов из fabric.js) в Canvas
Я использую fabric.js для создания фигур на холсте. щелкнув правой кнопкой мыши по фигурам, я хочу показать контекстное меню на основе выбранной фигуры. Я могу захватить событие правого клика и найти, какой объект сделан правым кликом. но я не знаю, как показать контекстное меню из JavaScript (что-то вроде contextmenu.show). ниже приведен код, который я использую, чтобы найти объект. Любой, пожалуйста, помогите.
$('.upper-canvas').bind('contextmenu', function (e) {
var objectFound = false;
var clickPoint = new fabric.Point(e.offsetX, e.offsetY);
e.preventDefault();
canvas.forEachObject(function (obj) {
if (!objectFound && obj.containsPoint(clickPoint)) {
objectFound = true;
// here need to set a customized context menu and show it
// but dont now how to do so.
}
});
});
1 ответ
Решение
Используя https://github.com/mar10/jquery-ui-contextmenu, вы можете создать контекстное меню на холсте и изменить пункты меню в зависимости от цели.
(Обратите внимание, что код не проверен, но он должен показать идею. Посмотрите подробности в документации по API.)
$(document).contextmenu({
delegate: ".upper-canvas",
menu: [...], // default menu
beforeOpen: function (event, ui) {
var clickPoint = new fabric.Point(event.offsetX, event.offsetY);
// find the clicked object and re-define the menu or
// optionally return false, to prevent opening the menu:
// return false;
// En/disable single entries:
$(document).contextmenu("enableEntry", ...);
// Show/hide single entries:
$(document).contextmenu("showEntry", ...);
// Redefine the whole menu:
$(document).contextmenu("replaceMenu", ...);
},
select: function(event, ui) {
// evaluate selected entry...
}
});