gpt4 book ai didi

javascript - Fabric.js stage.getActiveObject().clone() 与 fabric.util.object.clone(stage.getActiveObject())

转载 作者:太空狗 更新时间:2023-10-29 15:50:14 32 4
gpt4 key购买 nike

我正在使用 Fabric.js 并尝试为图像和文本元素实现复制功能。我找到了两个关于如何复制对象的解决方案:

方法一

stage.getActiveObject().clone();

方法二

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();

当在事件对象上运行此代码时,它一直提示克隆未定义。虽然这两种方法会做同样的事情,但必须有充分的理由使用方法 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 不起作用,请放心留下便条。

关于javascript - Fabric.js stage.getActiveObject().clone() 与 fabric.util.object.clone(stage.getActiveObject()),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21726191/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com