Я выделяю несколько объектов на холсте (удерживая нажатой клавишу Shift), и мой код зависит от порядка выбора (мне нужно использовать первый выбранный объект в качестве ссылки для групповой операции). Я заметил, что иногда порядок сохраняется при выборе, а иногда нет. Во время отладки я обнаружил в источнике fabric.js следующий код:

_createGroup: function(target) {
  var objects = this.getObjects(),
      isActiveLower = objects.indexOf(this._activeObject) < objects.indexOf(target),
      groupObjects = isActiveLower
        ? [this._activeObject, target]
        : [target, this._activeObject];
  this._activeObject.isEditing && this._activeObject.exitEditing();
  return new fabric.ActiveSelection(groupObjects, {
    canvas: this
  });
}

Таким образом, порядок зависит от Z-порядка первых двух выбранных объектов (эта функция вызывается, когда одиночный выбор преобразуется в множественный выбор после добавления второго объекта).

Есть какие-нибудь советы о том, как достичь моей цели и игнорировать Z-порядок? Я могу «отменить» это переупорядочение в моем коде, самостоятельно проверяя Z-порядок и возвращая объекты в их «естественный» порядок, но это звучит просто безумно.

При работе с этой функцией параметр preserveObjectStacking должен быть установлен в значение true, иначе порядок выбора будет восстановлен обратно на «неправильный» во время рендеринга.

1
kikap 3 Дек 2017 в 03:37

1 ответ

Лучший ответ

Я могу подтвердить вам, что нет никакого способа сохранить его в порядке, если вы не сделаете то, что делаете.

Пожалуйста, если вы думаете, что это плохо, отсутствует функция или что-то, с чем разработчику просто не следует сталкиваться, просто откройте тикет в системе отслеживания проблем на github для fabricjs.

2
AndreaBogazzi 3 Дек 2017 в 15:09