使用fabricjs从画布中删除所有对象(已分组/未分组)

Sif*_*eya 2 javascript fabricjs

我试图删除“画布”上的所有对象而不选择它们。画布中的对象包括已分组和未分组的对象。我看过的所有示例都演示了如何删除单个取消组合对象。

Canvas.ForEachObject(function(o){
     o.remove();
    });
Run Code Online (Sandbox Code Playgroud)

请参阅小提琴以获取我要实现的目标的示例。 https://jsfiddle.net/Shane00711/r8su3ya0/

小智 12

您是否知道canvas.remove可以接受多个参数?因此,最简单的方法应该是:

canvas.remove(...canvas.getObjects());
Run Code Online (Sandbox Code Playgroud)

除了canvas.clear之外,这只会删除画布中的对象,而不会删除背景。


Dur*_*rga 11

你只需要打电话

canvas.clear()

它将删除所有对象

  • 我注意到 canvas.clear() 是它清除了所有对象和画布属性,即(画布背景颜色)。这不是我想要实现的目标。 (2认同)

Sif*_*eya -3

我弄清楚了我需要做什么才能从画布中删除每个对象(分组/未分组)。首先,我必须获取画布中的所有对象。

var obj = canvas.getObjects();
Run Code Online (Sandbox Code Playgroud)

一旦我得到了所有的对象,我只需循环遍历它们,就像我所做的那样删除每个对象。

canvas.remove(obj[0]).
Run Code Online (Sandbox Code Playgroud)

我在我的中引用索引 0 的原因

canvas.remove(obj[0]) 
Run Code Online (Sandbox Code Playgroud)

是因为每次从画布中删除对象时,列表“obj”中的对象数量也会减少 1,将所有对象向上移动 1 个索引。这意味着画布上的每个对象在某个时刻都将位于“obj”列表的索引 0 处。

这是一个工作示例的小提琴。我删除了画布上的所有对象,而不选择单个对象。 http://jsfiddle.net/Shane00711/r8su3ya0/8/