FabricJs Ctrl C + Ctrl V.

时间:2015-05-12 11:36:12

标签: jquery fabricjs

我尝试使用 ctrl + c ctrl + v 使用fabricjs。

我设法做了些什么。我正在复制选择和复制粘贴的对象,但是如果我再次按 ctrl + v ,则该项目位于最后一个项目内。如果我选择的项目正在改变位置。

复制粘贴操作:

if (map[17] && map[67]) {
    event.preventDefault();
    if(canvas.getActiveGroup()){
        for(var i in canvas.getActiveGroup().objects){
            var object = fabric.util.object.clone(canvas.getActiveGroup().objects[i]);
            object.set("top", object.top+5);
            object.set("left", object.left+5);
            copiedObjects[i] = object;
        }                    
        console.log(copiedObjects);
    }
    else if(canvas.getActiveObject()){
        var object = fabric.util.object.clone(canvas.getActiveObject());
        object.set("top", object.top+5);
        object.set("left", object.left+5);
        copiedObject = object;
        copiedObjects = new Array();
        console.log(copiedObjects);
    }
}else if(map[17] && map[86]){
    event.preventDefault();
    console.log(copiedObjects);
    if(copiedObjects.length > 0){
        for(var i in copiedObjects){
            canvas.add(copiedObjects[i]);
        }                    
    }
    else if(copiedObject){
        canvas.add(copiedObject);
    }
    canvas.deactivateAll().renderAll();
}

我做了JsFiddle

请进入JsFiddle并选择该对象。按 ctrl + c ,然后按 ctrl + v 两次,然后选择两个对象。你明白我的问题是什么。

谢谢

1 个答案:

答案 0 :(得分:1)

我的解决方案对于这个问题,我从复制的对象中创建了新对象 并将其添加到canvas

而不是

canvas.add(copiedObject);

我这样做

var object = fabric.util.object.clone(copiedObject);
object.set("top", object.top+5);
object.set("left", object.left+5);
copiedObject1 = object;
canvas.add(copiedObject1);

这是我的jsfiddle: - https://jsfiddle.net/n5a1wkfb/2/