私は実際に、キャンバスの相互作用にfabric.jsフレームワークを使用するhtml5キャンバスプロジェクトに取り組んでいます。今、私は複数のオブジェクトの削除に苦労しています。次のコードは、選択したオブジェクトを追跡するようには見えませんが、キャンバス上のすべてのオブジェクトを追跡します。
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());
}
};
失敗しないで。
ほとんどの問題を解決した@Kangaxコメントのため、キャンバスから現在選択されているオブジェクトを削除する次の解決策を見つけました。
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());
}
};
この関数は、グループが選択されているかどうかを確認します。グループを選択すると、グループのすべてのオブジェクトが削除されます。グループが選択されていない場合、関数は選択されたオブジェクトを削除しようとします。何も選択されていない場合、キャンバスは変更されません。
あなたのコードは、オブジェクトを選択してから選択解除しているようです。
これはうまくいくかもしれません:
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]);
}
};
良い情報リンク:
https://github.com/kangax/fabric.js/wiki/Tutorial-2#wiki-modifying-objects
オブジェクトのプロパティを確認して削除できます
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++;
}
}
Canvas.removeは複数のパラメーターを取ることができることをご存知ですか?したがって、最も簡単な方法はこれです:
canvas.remove(...canvas.getObjects());
canvas.clear
以外は、キャンバス内のオブジェクトのみが削除され、背景も削除されません。
Jsfiddleで見つけたこの1つの解決策を除いて、上記の解決策(またはstackoverflowの他の場所)は私にとってはうまくいきませんでした:
function deleteObjects(){
var activeObject = canvas.getActiveObject(),
activeGroup = canvas.getActiveGroup();
if (activeObject) {
if (confirm('Are you sure?')) {
canvas.remove(activeObject);
}
}
else if (activeGroup) {
if (confirm('Are you sure?')) {
var objectsInGroup = activeGroup.getObjects();
canvas.discardActiveGroup();
objectsInGroup.forEach(function(object) {
canvas.remove(object);
});
}
}
}
私はこれをしました:
var selectedObj = canvas.getObjects(canvas.getActiveGroup())
選択したオブジェクトの配列を返します。 :)最後の関数括弧がコードスニペットにありません