我已经扩展了 Fabric 库来执行类似的功能。
首先,创建一个文件 fabricExtensions.js,并在您将结构库加载到页面的 head 部分之后将其包含在内。
<!-- Load FabricJS Library -->
<script type="text/javascript" src="fabric.min.js"></script>
<!-- Load FabricJS Extension file -->
<!-- ** Load this file in the HEAD AFTER loading FabricJS** -->
<script type="text/javascript" src="fabricExtensions.js"></script>
在新创建的fabricExtensions.js 文件中添加以下代码:
fabric.Canvas.prototype.getItemByAttr = function(attr, name) {
var object = null,
objects = this.getObjects();
for (var i = 0, len = this.size(); i < len; i++) {
if (objects[i][attr] && objects[i][attr] === name) {
object = objects[i];
break;
}
}
return object;
};
这段代码的作用是让你通过分配给它的任何属性来选择一个对象。
现在,要删除对象,这应该可以工作:
canvas.fabric.getItemByAttr('id', myID).remove();
该方法将允许您将任何属性设置为对象。或者,您可以将其更改为类似这样的内容,以仅针对您正在寻找的确切属性:
fabric.Canvas.prototype.getItemByMyID = function(myID) {
var object = null,
objects = this.getObjects();
for (var i = 0, len = this.size(); i < len; i++) {
if (objects[i].id&& objects[i].id=== myID) {
object = objects[i];
break;
}
}
return object;
};
并移除对象:
canvas.fabric.getItemByMyID(myID).remove();