我在畫布上選擇了多個對象(按住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,否則在渲染過程中選擇順序將恢復爲「錯誤」。
我解決此工作目前保持一票我使用事件處理程序'selection:created'和'selection:updated'創建了自己的選定對象數組,但它看起來並不很優雅。 – kikap