3

如果使用 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****
  });
 }
};

上面的代码适用于所有对象,但代码不适用于路径对象

4

1 回答 1

6

fabric.Pathfabric.PathGroup自fabric.js 1.2.2版(https://github.com/kangax/fabric.js/commit/c8cab03aace5510554cd02fa143248ab7497f6c2)以来,对象是异步的。

所以你必须区分异步和同步对象。

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/

于 2013-08-16T06:57:06.653 回答