我正在使用Fabric.js,并且试图为图像和文本元素实现复制功能。我发现了有关如何复制对象的两种解决方案:

方法1

stage.getActiveObject().clone();

方法2
fabric.util.object.clone(stage.getActiveObject());

使用第一种方法时,不会发生克隆,而使用第二种方法时,则会发生克隆。更具体地说,对于第一种方法,我使用了以下代码:
var obj = stage.getActiveObject();
if (!obj) return;

var clone = obj.clone();
clone.set({
    top: clone.get('top') + 30
});
stage.add(clone);
stage.renderAll();

在 Activity 对象上运行此代码时,它会不断告知克隆未定义。尽管两种方法都可以做相同的事情,但必须有充分的理由使用方法1或2。

谁能解释这两个之间的区别?

我注意到的另一件事是,当使用第二种方法时,fabric.util.object.clone(stage.getActiveObject());克隆的对象将获得与原始对象相同的ID。尽管克隆是原始副本的克隆,但对我来说,它们共享相同的ID对我来说毫无意义。换句话说,如何克隆对象并为其赋予唯一的ID?

最佳答案

好的,所以我想出了一个解决方案。它对我有用,所以也许可以帮助其他人。这是我要做的最终代码:

var object = fabric.util.object.clone(stage.getActiveObject());
stage.discardActiveObject();

object.title = object.title + '_copy';
object.id = (object.id * 2);
object.set("top", object.top+20);
object.set("left", object.left+20);

stage.add(object);
stage.renderAll();

我的应用程序每个对象都需要一个唯一的ID,因此我会将原始ID乘以2。但是,如果有人有更好的解决方案,或者可以向我提供有关为什么我上面的帖子中的方法1无效的更多信息,请随时留下注意。

07-24 09:43
查看更多