clone()不适用于具有最新版本Fabricjs的Path Object

时间:2013-08-16 05:52:15

标签: fabricjs

如果使用clone()方法克隆fabric.Path对象,则不会复制路径对象。我在这里看到过这个问题 https://github.com/kangax/fabric.js/issues/330但Fabric js的版本不同。 有人可以帮我这个。

  var obj = canvas.getActiveObject();
    if (!obj) return;
    var clone = obj.clone();
    clone.set({
        top: clone.get('top') + 150
    });
    canvas.add(clone);
    canvas.renderAll();

以下是我得到的错误。

 else {
  fabric.util.enlivenObjects(object.paths, function(enlivenedObjects) {
    delete object.paths;
    callback(new fabric.PathGroup(enlivenedObjects, object));
   ****Uncaught TypeError: undefined is not a function****
  });
 }
};

上面的代码适用于所有对象,但代码不适用于Path Object

1 个答案:

答案 0 :(得分:6)

自从fabric.js版本1.2.2(https://github.com/kangax/fabric.js/commit/c8cab03aace5510554cd02fa143248ab7497f6c2)起,

fabric.Pathfabric.PathGroup对象是异步的。

因此,您必须区分异步和同步对象。

var obj = canvas.getActiveObject();

if (!obj) return;

if (fabric.util.getKlass(obj.type).async) {
  obj.clone(function (clone) {
    clone.set({left: 200, top: 100});
    canvas.add(clone);
  });
}
else {
  canvas.add(obj.clone().set({left: 100, top: 100}));
}

在这里你可以看到它的实际效果: http://jsfiddle.net/Kienz/73Cta/