如何在Fabric.js中停用所有对象

13
如何在保存图像之前在Fabric.js中停用所有对象?
function rasterize() {
  if (!myscript.Canvas.supports('toDataURL')) {
    alert('This browser doesn\'t provide means to serialize canvas to an image');
  }
  else {
    /*i want to deactivate all object here*/
    window.open(canvas.toDataURL('png'));
  }
}
5个回答

10

@kienz 有没有什么原因需要在“deactivateAll()”之后手动触发“canvas.renderAll()”?我希望它是自动的。 - temuri

5

我用的方法(fabric 2.7):

this.canvas.forEachObject(object => {
    object.selectable = false;
    object.evented = false;
});

另一种解决方案是对画布应用一些CSSpointer-events: none

1
canvas.deactivateAll();
canvas.renderAll();

只需这两行代码也能达到同样的效果,无需将canvas.selection设置为false。它用于禁用组选择。

1

对我来说这是有效的:

canvas.discardActiveObject();
canvas.requestRenderAll();

1
这似乎是一个答案。也许不太解释性,但不是评论。另一个提到discardActiveObject的答案更像是应该作为评论的内容。 - Gert Arnold
请在您的答案中添加支持细节以改善它。 - Ethan

0
当我发现这个问题时,我正在寻找:
/* Make sure that touch / click events do nothing */
canvas.deactivateAll();
canvas.selection = false;
canvas.forEachObject(function(o) {
    o.selectable = false;
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接