javascript - FabricJS:无法克隆对象或图像,因为它们未定义

标签 javascript fabricjs

我是 FabricJS 的新手,并且一直在使用它。我正在尝试构建一个开源图像编辑器。目前,此代码允许我克隆形状等对象,但我不能一次克隆对象组,也不能克隆图像或图像组。我从克隆一组对象或任何图像得到的错误是:

未捕获的类型错误:无法读取未定义的属性“长度”

或者在这种情况下克隆图像的错误是: 未捕获的类型错误:无法读取未定义的属性“集合”

这是我克隆对象的代码:

function clone() {
var object = null;
   if (canvas.getActiveGroup()) {
     var objects = canvas.getActiveGroup().objects;

     canvas.deactivateAll();

     var cloned = [];
     for (var i = 0; i < objects.length; i++) {
        object = objects[i].clone();

        object.set("top", object.top + 20);
        object.set("left", object.left + 20);
        canvas.add(object);
        cloned.push(object);
     }

     selectAll(cloned);
   } else if (canvas.getActiveObject()) {
     object = canvas.getActiveObject().clone();
     object.set("top", object.top + 20);
     object.set("left", object.left + 20);
     canvas.add(object);

     canvas.deactivateAll();
     canvas.setActiveObject(object);
    }

    canvas.renderAll();

    canvas.trigger("object:statechange");
}

下面是我用来导入图片的代码:

document.getElementById('imgLoader').onchange = function handleImage(e) {
var reader = new FileReader();
  reader.onload = function (event){
  var imgObj = new Image();
  imgObj.src = event.target.result;
  imgObj.onload = function () {
    var image = new fabric.Image(imgObj);
    image.set({
          angle: 0,
          padding: 10,
          cornersize:10,
          height:110,
          width:110,
    });
    canvas.centerObject(image);
    canvas.add(image);
    canvas.renderAll();
  };
};
  reader.readAsDataURL(e.target.files[0]);
};

谢谢你的帮助

最佳答案

请阅读这里:

http://fabricjs.com/docs/fabric.Object.html

enter image description here

克隆是一个异步函数。 它不返回任何内容。

function clone() {
var object = canvas.getActiveGroup();
   if (object) {
     object.clone(function(clone) {
       clone.set("top", object.top + 20);
       clone.set("left", object.left + 20);
       canvas.deactivateAll();
       clone.getObjects().forEach(function(obj){
         canvas.add(obj);
       });
       clone.canvas = canvas;
       canvas.setActiveGroup(clone);
     });    
   }
var object = canvas.getActiveObject();
 if (object) {
       object = object.clone(function(cloned){
         cloned.set("top", object.top + 20);
         cloned.set("left", object.left + 20);
         canvas.add(cloned);
         canvas.deactivateAll();
         canvas.setActiveObject(object);
       });
     }
     canvas.renderAll();
     canvas.trigger("object:statechange");
    }

关于javascript - FabricJS:无法克隆对象或图像,因为它们未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46114441/

相关文章:

html - Canvas - FabricJS - 将笔划与文本边缘分开

fabricjs - Fabricjs v2 之后 ClipTo 的替代品是什么?

javascript - 如何使用文本 anchor : middle in fabric js

javascript - 在 IE5 怪异模式下更改 iframe 的 src 会导致整个页面发生变化

JavaScript 未在 WKWebView 中执行

javascript - 是否可以指示浏览器首先绘制页面的哪些元素?

javascript - fabric js 作为 ES6 在 Chrome 中的导入不起作用

javascript - 为什么 Array.from 的回调比 map 函数慢很多?

javascript - 可以更有效地重写这个 jQueryJjavaScript 片段吗?

svg - 如何使用大量对象提高 canvas fabric.js 性能