Javascript fabric js canvas.remove()不删除对象

Javascript fabric js canvas.remove()不删除对象,javascript,canvas,fabricjs,Javascript,Canvas,Fabricjs,因此,我正在尝试在我的应用程序中实现撤销功能,我遇到了一个问题,撤销功能可以正常工作,不管是canvas.remove()由于某种原因无法正常工作,还是object:removed事件未触发。要确保该对象确实存在,请输入console.log并确保它确实存在。。但是fabric js不会删除对象,也不会触发对象:removed(显然) 如果要使用canvas.remove()删除对象,则只会触发'object:removed'事件 演示 var canvas=newfabric.canvas(

因此,我正在尝试在我的应用程序中实现撤销功能,我遇到了一个问题,撤销功能可以正常工作,不管是canvas.remove()由于某种原因无法正常工作,还是object:removed事件未触发。要确保该对象确实存在,请输入console.log并确保它确实存在。。但是fabric js不会删除对象,也不会触发对象:removed(显然)


如果要使用
canvas.remove()
删除对象,则只会触发
'object:removed'
事件

演示

var canvas=newfabric.canvas('canvas');
画布。添加(新织物。圆圈)({
左:50,顶部:50,半径:50,填充:“红色”
}))
画布。添加(新织物。圆圈)({
左:150,顶部:150,半径:50,填充:“绿色”
}))
画布。添加(新织物。圆圈)({
左:250,顶部:250,半径:50,填充:“蓝色”
}))
canvas.add(new fabric.Rect({
左:250,顶:150,宽:100,高:100
}));
canvas.requestRenderal();
函数undo(){
var object=canvas.item(canvas.getObjects().length-1);
画布。移除(对象);
}
canvas.on('object:removed',function(object){
控制台。警告(对象);
})
画布{
边框:2倍实心#000;
}

解开

如果要使用
canvas.remove()
删除对象,则只会触发
'object:removed'
事件

演示

var canvas=newfabric.canvas('canvas');
画布。添加(新织物。圆圈)({
左:50,顶部:50,半径:50,填充:“红色”
}))
画布。添加(新织物。圆圈)({
左:150,顶部:150,半径:50,填充:“绿色”
}))
画布。添加(新织物。圆圈)({
左:250,顶部:250,半径:50,填充:“蓝色”
}))
canvas.add(new fabric.Rect({
左:250,顶:150,宽:100,高:100
}));
canvas.requestRenderal();
函数undo(){
var object=canvas.item(canvas.getObjects().length-1);
画布。移除(对象);
}
canvas.on('object:removed',function(object){
控制台。警告(对象);
})
画布{
边框:2倍实心#000;
}

解开

这将适用于您:

var objects = canvas.getObjects();
for(var i = 0; i < objects.length; i++){
  //console.log(objects[i]);     
  canvas.remove(objects[i]);
}canvas.renderAll();
var objects=canvas.getObjects();
对于(var i=0;i
这将适用于您:

var objects = canvas.getObjects();
for(var i = 0; i < objects.length; i++){
  //console.log(objects[i]);     
  canvas.remove(objects[i]);
}canvas.renderAll();
var objects=canvas.getObjects();
对于(var i=0;i
对不起,我没听懂你的话?我到底做错了什么?@flex_u。当你在做
canvas.\u objects.pop()
时,最后一个对象已经从对象数组中移除,然后你试图使用
canvas.remove
从画布中移除。这样一来,它就不会在数组中找到被移除的对象,也就不会移除它,也不会触发事件。检查答案,我从画布中获取最后一项,然后从画布中删除。@flex\uuuhappy coding;)这是一个问题,无论我做什么,在激活的object@argon例如:很抱歉,我听不懂你的话?我到底做错了什么?@flex_u。当你在做
canvas.\u objects.pop()
时,最后一个对象已经从对象数组中移除,然后你试图使用
canvas.remove
从画布中移除。这样一来,它就不会在数组中找到被移除的对象,也就不会移除它,也不会触发事件。检查答案,我从画布中获取最后一项,然后从画布中删除。@flex\uuuhappy coding;)这是一个问题,无论我做什么,在激活的object@argon,创建一个小提琴来陈述您的问题。