【问题标题】:Deleting All objects(Grouped/Ungrouped) from Canvas with fabricjs使用fabricjs从画布中删除所有对象(分组/未分组)
【发布时间】:2017-12-06 11:25:33
【问题描述】:

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

Canvas.ForEachObject(function(o){
     o.remove();
    });

请参阅小提琴以获取我正在尝试实现的示例。 https://jsfiddle.net/Shane00711/r8su3ya0/

【问题讨论】:

  • 我想通了。所以我首先检索画布内的所有对象,然后循环遍历该对象列表(分组和未分组),每次删除一个。 var r = canvas.getObjects(); while (r.length != 0) { canvas.remove(r[0]); canvas.discardActiveGroup(); }

标签: javascript fabricjs


【解决方案1】:

你知道canvas.remove 可以接受多个参数吗? 所以最简单的方法应该是这个:

canvas.remove(...canvas.getObjects());

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

【讨论】:

    【解决方案2】:

    你只需要打电话

    canvas.clear()

    它将删除所有对象

    【讨论】:

    • 我注意到 canvas.clear() 是它清除了所有对象和画布属性,即(画布背景颜色)。这不是我想要达到的目标。
    • @SifisoMfeya 您可以存储您的颜色属性并再次初始化到画布
    • @SifisoMfeya 这是你的更新fiddle
    【解决方案3】:

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

    var obj = canvas.getObjects();
    

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

    canvas.remove(obj[0]).
    

    我在我的

    中引用索引0的原因
    canvas.remove(obj[0]) 
    

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

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

    【讨论】:

    • 如果您有很多对象,此方法效率不高
    猜你喜欢
    • 2017-10-14
    • 1970-01-01
    • 1970-01-01
    • 2017-03-08
    • 2017-08-08
    • 2015-07-29
    • 1970-01-01
    • 2015-10-12
    • 2018-08-28
    相关资源
    最近更新 更多