Fabric.js:按名称获取对象

Imr*_*med 7 canvas fabricjs

是否可以Fabric.js按名称获取对象?我可以添加子类,这将允许我向对象添加自定义名称属性.但之后我可以通过名称而不是索引来调用对象吗?例如

按索引调用 canvas.getItem(0);

我想要类似的东西 canvas.getItemByName(itemName);

Kie*_*enz 16

您可以使用以下代码在应用程序级别执行此操作:

/**
 * Item name is non-unique
 */
fabric.Canvas.prototype.getItemsByName = function(name) {
  var objectList = [],
      objects = this.getObjects();

  for (var i = 0, len = this.size(); i < len; i++) {
    if (objects[i].name && objects[i].name === name) {
      objectList.push(objects[i]);
    }
  }

  return objectList;
};
Run Code Online (Sandbox Code Playgroud)

如果对象名称是唯一的,您可以执行以下操作:

/**
 * Item name is unique
 */
fabric.Canvas.prototype.getItemByName = function(name) {
  var object = null,
      objects = this.getObjects();

  for (var i = 0, len = this.size(); i < len; i++) {
    if (objects[i].name && objects[i].name === name) {
      object = objects[i];
      break;
    }
  }

  return object;
};
Run Code Online (Sandbox Code Playgroud)

现在你可以打电话canvas.getItemByName('name1');或canvas.getItemsByName('name1');.