我尝试使用 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 两次,然后选择两个对象。你明白我的问题是什么。
谢谢
答案 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/