代码之家  ›  专栏  ›  技术社区  ›  Michael Tsipes

fabric的上下文菜单。js不在Safari中工作

  •  0
  • Michael Tsipes  · 技术社区  · 6 年前

    我正在完成我的织物网站。js和我发现了一个非常讨厌的bug。

    我制作了一个鼠标右键单击的处理程序,即打开上下文菜单。 它在大多数情况下都可以正常工作,但对于Safari和chrome的sometimves,它会打开上下文菜单一小会儿,然后直接关闭。

    出于某种原因,在contextmenu listener鼠标之后。up事件激发 仅在Safari中

    我需要防止老鼠。不知何故,在上下文菜单之后。

    这是代码。

            var activeObject = canvas.getActiveObject();
            var activeGroup  =  canvas.getActiveGroup();
            var objectInGroup = false;
    
    
            var relativeX = e.clientX;
            var relativeY = e.clientY;
    
            var offset = jQuery(this).offset();
    
            var clickPoint = new fabric.Point(e.offsetX, e.offsetY);
    
            //debugger;
            var pointer = canvas.getPointer(e.originalEvent);
            var objects = canvas.getObjects();
            for (var i = objects.length - 1; i >= 0; i--) {
                if (objects[i].containsInGroupPoint(clickPoint) || objects[i].containsPoint(clickPoint)) {
    
                    console.log(i);
                    if (activeGroup)
                    {
                        for (var y = 0, len = activeGroup._objects.length; y < len; y++) {
                            if (activeGroup._objects[y]==objects[i])
                            {
                                objectInGroup = true;
                            }
    
                        }                       
    
                    }
    
    
                    if (activeObject!=objects[i] && !objectInGroup)
                    {   
                        canvas.deactivateAll();
                        canvas.setActiveObject(objects[i]);
    
                    }
    
                    break;
                }
            }
    
            if (i < 0) {
    
            }
    
            activeObject = canvas.getActiveObject();
    
    
    
    
    
            //console.log(activeObject);
    
            if(activeObject == null && activeGroup == null){
    
                var obj = canvas.getObject();
    
            }
    
            console.log(obj);
    
            console.log(e.pageX + " - " + e.pageY);
            console.log(offset.left + " - " + offset.top);
    
            if(jQuery("#prozrachnost").is(':visible')){
    
                jQuery("#prozrachnost").hide();
                jQuery(".rect_books").hide();
                jQuery(".cap_palitra").hide();
            }else{
                jQuery("#prozrachnost").css({
                    'position':'absolute', 'top' : relativeY, 'left' : relativeX, 'width' : '171px', 'height' : 'auto', 'z-index': 1
                });
                jQuery("#prozrachnost").show();
                var ch = jQuery('#prozrachnost').find('.button_menu_top').height();
                var cw = jQuery('#prozrachnost').find('.button_menu_top').width();
                jQuery('#prozrachnost').find('.button_menu_bottom').css({height:ch});
                jQuery('#prozrachnost').find('.button_menu_center').css({ 
                    left : ((cw / 2) - (jQuery('#prozrachnost').find('.button_menu_center').width() / 2)) + 'px' 
                });
    
    
    
                var type = '';
    
                jQuery('#prozrachnost .button_menu_top').hide();
                jQuery('#prozrachnost .button_menu_bottom a').hide();
    
                if(activeObject){
                    if(activeObject.get('myType') == 'text' || activeObject.get('myType') == 'image'){
                        jQuery('#prozrachnost .button_menu_top').show();
                        jQuery('#prozrachnost .button_menu_bottom a.del').show();
                        jQuery('#prozrachnost .button_menu_bottom a.palitra').show();
                    }
    
                    if(activeObject.get('myType') == 'rect' || activeObject.get('myType') == 'captionborder'){
                        jQuery('#prozrachnost .button_menu_bottom a.books').show();
                        jQuery('#prozrachnost .button_menu_bottom a.del').show();
                        jQuery('#prozrachnost .button_menu_bottom a.palitra').show();
                    }
    
                    type = activeObject.get('myType');
    
                }else if (activeGroup){
    
                    if(activeGroup._objects[0].get('myType') == 'text' || activeGroup._objects[0].get('myType') == 'image'){
                        jQuery('#prozrachnost .button_menu_top').show();
                        jQuery('#prozrachnost .button_menu_bottom a.del').show();
                        jQuery('#prozrachnost .button_menu_bottom a.palitra').show();
                    }
    
                    if(activeGroup._objects[0].get('myType') == 'rect' || activeGroup._objects[0].get('myType') == 'captionborder'){
                        jQuery('#prozrachnost .button_menu_bottom a.books').show();
                        jQuery('#prozrachnost .button_menu_bottom a.del').show();
                        jQuery('#prozrachnost .button_menu_bottom a.palitra').show();
                    }
    
                    type = activeGroup._objects[0].get('myType');
                }
    
                console.log(activeGroup);
    
                jQuery("#prozrachnost a.button_link").click(function(e){
                    e.preventDefault();
                    var activeObject = canvas.getActiveObject();
                    var activeGroup  =  canvas.getActiveGroup();
                    var btn = jQuery(this);
    
                    var type = '';
    
                    if(activeObject) { type = activeObject.get('myType'); }
                    else if (activeGroup) { type = activeGroup._objects[0].get('myType'); }
    
    
                    if(btn.hasClass('books')){
                        if(type == 'rect'){ jQuery("#RECTBACK").click(); }
                        if(type == 'captionborder'){ jQuery("#CAPBACK").click(); }
                    }
    
                    if(btn.hasClass('palitra')){
    
                        if(type == 'rect'){
                            jQuery(".cap_palitra").hide();
                            jQuery(".ttext_color").hide();
                            jQuery(".rect_books").show();
                        }
    
                        if(type == 'captionborder'){
                            jQuery(".rect_books").hide();
                            jQuery(".ttext_color").hide();
                            jQuery(".cap_palitra").show();
                        }
    
                        if(type == 'text'){
                            jQuery(".rect_books").hide();
                            jQuery(".cap_palitra").hide();
                            jQuery(".ttext_color").show();
                        }
    
                    }
    
                    if(btn.hasClass('del')){
    
                        if(type === 'text') { jQuery("#ITDEL").trigger('click'); }
                        if (type === 'image'){ jQuery("#ITDEL").trigger('click'); }
                        if(type === 'rect'){ jQuery("#RCBDEL").trigger('click'); }
                        if (type === 'captionborder'){ jQuery("#RCBDEL").trigger('click'); }
    
                    }
                });
            }
            e.preventDefault();
        });
    
        // undo and redo buttons
        jQuery('#undo').click(function() { replay(w.undo, w.redo, '#redo', this); });
        jQuery('#redo').click(function() { replay(w.redo, w.undo, '#undo', this); });
    
        // undo and redo buttons 2
        jQuery('#undo1').click(function() { replay(w.undo, w.redo, '#redo1', this); });
        jQuery('#redo1').click(function() { replay(w.redo, w.undo, '#undo1', this); });
    
        //disable rotation/scling on selected group
        canvas.observe('selection:created', function (e){
            if (e.target.type === 'group') {
                e.target.hasControls = false;
            }
        });     
    
    
    
        canvas.on('mouse:up',function(option){
    
            if(jQuery("#prozrachnost").is(':visible')){
                jQuery("#prozrachnost").hide();
                jQuery(".rect_books").hide();
                jQuery(".cap_palitra").hide();
            }
    
            //console.log('up');
    
            if(option.target){
                if (option.target == window.change_item) {window.change_item=option.target;}
            }
    
            if(option.target){ methods.active(option.target.get('myType'),option); }
        });
    

    有人能给我一个线索吗。

    这里是链接 http://motivashka-board.ru/konstruktor.html

    这就是上下文菜单的外观 enter image description here

    提前谢谢。

    1 回复  |  直到 6 年前
        1
  •  0
  •   Michael Tsipes    6 年前

    我自己解决了这个问题。 我已经从鼠标中删除了禁用代码。直到鼠标。向下

            if(jQuery("#prozrachnost").is(':visible')){
            jQuery("#prozrachnost").hide();
            jQuery(".rect_books").hide();
            jQuery(".cap_palitra").hide();
        }
    

    这就成功了。