删除FabricJS中的多个路径

时间:2017-08-28 16:57:23

标签: javascript fabricjs

我正在使用Fabric创建一个协作绘图应用程序。由于此应用程序的性质,人们最好一次删除所有行,而不是实现某种撤消/删除功能。

我试过迭代path的列表,如下所示:

canvas.getObjects().forEach((path) => {
  if(path.senderId === client.id){
    canvas.remove(path);
  }
});

// Or

let paths = canvas.getObjects().filter(path => path.senderId === client.id);

while(paths.length) {
  canvas.remove(paths[0]);
}

第一个不起作用,因为删除路径会修改数组的长度(如所讨论的here)。然而,第二个永远运行,我不知道为什么。

如果这是错误的方法,请告诉我。谢谢!

1 个答案:

答案 0 :(得分:0)

一个简洁明了的方法是:

canvas.getObjects('path').forEach((path) => {
  if(path.senderId === client.id){
    canvas.remove(path);
  }
});

通过这种方式,getObjects将返回一个新数组,您应该能够删除它们,而不会对您正在处理的数组感到生气。

我相信getObjects()应该总是返回一个浅拷贝,以便于处理这些情况。如果某人有某些性能问题仍然可以直接访问canvas._objects。