javascript - 如何使用 fabric.js Canvas 切换/选择/删除自定义形状

标签 javascript jquery html canvas fabricjs

我正在使用 Krunal Shah/Thirdrocktechkno 从这个问题中提供的答案:how to free draw using fabric-js ,效果很好(至少我可以切换不同的形状并在我的 Canvas 上绘图)但是我想弄清楚一些事情。

  • 在不同的形状(圆/线/箭头/正方形)之间切换,如果有更喜欢的方式,那么这个:

    这是我必须在形状之间切换的东西,但我无法在设置时单独关闭它们,只能切换到不同的形状:

HTML:

<button id="line" class="btn btn-info">Straight Line</button>
<button id="circle" class="btn btn-info">Circle</button>
<button id="squrect" class="btn btn-info">Square/Rectangle</button>
<button id="arrow" class="btn btn-info">Arrow</button>

JS:

// Tried this to disable/untoggle the shape
var lineOn = false;
$("#line").click(function(){
    if(!lineOn){
         lineOn = true;
         canvas.isDrawingMode = false;
         var line = new Line(canvas);
    } else if(lineOn = true){
        lineOn = false;
        $(Line(canvas)).unbind();
    }
});

$("#circle").click(function(){
    canvas.isDrawingMode = false;
    var circle = new Circle(canvas);
});

$("#squrect").click(function(){
    canvas.isDrawingMode = false;
    var squrect = new Rectangle(canvas);
});

$("#arrow").click(function(){
    canvas.isDrawingMode = false;
    var arrow = new Arrow(canvas);
});
  • 如何禁用/取消绑定(bind)/关闭形状以停止绘制?
    我确实看到了这个,但不确定如何使用它:

Line.prototype.disable = function() { this.isDrawing = false; }

  • 如何将这些形状作为组选择删除(我尝试创建一个 getSelection 函数并搜索了问题,用谷歌搜索并检查了 wiki,但我只是不理解它或遗漏了一些东西。activeGroup 方式声明函数未定义。使用此函数时我可以一次删除一个对象:

$("#delete").click(function(){ canvas.isDrawingMode = false; deleteObjects(); });

function deleteObjects(){
    var activeObject = canvas.getActiveObject();
    if (activeObject) {
        canvas.discardActiveObject();
        canvas.remove(activeObject);
        canvas.remove(Line);
        canvas.remove(Circle);
        canvas.remove(Rectangle);
        canvas.remove(Arrow);
    } else if (canvas.getActiveGroup()) {
        canvas.getActiveGroup().forEachObject(function(a) {
            canvas.remove(a);
        });
        canvas.discardActiveGroup();
    } 
}

但是,因为我似乎无法解开线/圆/等。形状,如果我进入选择模式,如下所示,设置的线/圆形状在单击鼠标时保持绘制形状(即使在自由绘制模式下),它也会显示选择框,但如果我尝试删除选择它不起作用

$("#select").click(function(){
    canvas.isDrawingMode = false;
    this.isDrawing = false;
    canvas.selection = true;
});

最佳答案

canvas.off('mouse:down');
canvas.off('mouse:up');
canvas.off('mouse:move');

使用canvas.off删除附加事件的方法。您正在将事件注册到 Canvas ,但不会在选择/自由绘图时将其删除,这就是它绘制工具的原因。检查更新 jsFiddle

关于javascript - 如何使用 fabric.js Canvas 切换/选择/删除自定义形状,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47214562/

相关文章:

javascript - 聊天框滚动到底部?

javascript - 增加仅由有序列表 <ol> 创建的新 <li> 元素的 id

javascript - 限制数量的脚本。文本框中的字符不起作用。有任何想法吗?

html - 带侧边栏的棘手粘性页脚

html - 如何使用html和css使div与另一个div重叠

javascript - 是否可以通过脚本标签加载压缩脚本?

javascript - after() 显示解析后的 html

javascript - 带有 knockout 绑定(bind)的嵌套 foreach ?

javascript - Node.js - listener must be a function 错误

javascript - 如何在 JavaScript 中更改对象数组中元素的值?