I'm actually working on a html5 canvas project which uses the fabric.js Framework for the canvas interactions. Now I'm struggeling with the deletion of multiple objects. The following code does not seem to track the selected objects, but tracks all objects on the canvas.
var deleteSelectedObject = document.getElementById('delete-item');
deleteSelectedObject.onclick = function(){
var curSelectedObjects = new Array();
curSelectedObjects = canvas.getObjects(canvas.getActiveGroup);
canvas.discardActiveGroup();
for (var i = 0; i < curSelectedObjects.length; i++){
canvas.setActiveObject(curSelectedObjects[i]);
canvas.remove(canvas.getActiveObject());
}
};
Don't get my failure.
First, if an item is selected in the canvas, enable the Delete button. If no items are selected in the canvas, disable the Delete button. If the user clicks the Delete key, delete the selected objects.
After version 2 of fabric.js, there is no getActiveGroup. To delete multiple objects, you need to use forEachObject. This example builds on the previous one and can delete single objects or grouped objects.
Disabling this option will not give a performance boost when adding/removing a lot of objects to/from canvas at once since the renders are quequed and executed one per frame.
Here's the scenarios we want to react to: First, if an item is selected in the canvas, enable the Delete button. If no items are selected in the canvas, disable the Delete button. If the user clicks the Delete key, delete the selected objects.
Due to @Kangax comment which solved most of the problem, I found the following solution to delete the currently selected objects from the canvas.
var deleteSelectedObject = document.getElementById('delete-item'); deleteSelectedObject.onclick = function() { if(canvas.getActiveGroup()){ canvas.getActiveGroup().forEachObject(function(o){ canvas.remove(o) }); canvas.discardActiveGroup().renderAll(); } else { canvas.remove(canvas.getActiveObject()); } };
The function checks whether a group is selected. If a group is selected every object of the group gets removed. If no group is selected the function tries to remove a selected object. If nothing is selected, the canvas is not changed.
Your code seems like it is selecting and then de-selecting the objects.
This may work better:
var deleteSelectedObject = document.getElementById('delete-item'); deleteSelectedObject.onclick = function() { var curSelectedObjects = canvas.getObjects(canvas.getActiveGroup); canvas.discardActiveGroup(); for (var i = 0; i < curSelectedObjects.length; i++) { canvas.remove(curSelectedObjects[i]); } };
Good information link:
https://github.com/kangax/fabric.js/wiki/Tutorial-2#wiki-modifying-objects
You can check any object property and can remove
var objects = canvas.getObjects();
for (var i = 0; i < objects.length; ) {
if (objects[i].name == 'cropArea' || objects[i].name == 'bleedLine') {
canvas.remove(objects[i]);
i = 0;
} else {
i++;
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With