Отображение настраиваемого контекстного меню при щелчке фигур (объектов из 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...
    }
});
Другие вопросы по тегам