2017-12-03 98 views
0

我在畫布上選擇了多個對象(按住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,否則在渲染過程中選擇順序將恢復爲「錯誤」。

+0

我解決此工作目前保持一票我使用事件處理程序'selection:created'和'selection:updated'創建了自己的選定對象數組,但它看起來並不很優雅。 – kikap

回答

1

我可以確認你沒有辦法保持它的順序,除非你做你正在做的事情。

請,如果你認爲這是一件壞事,缺少功能什麼的一個開發只是不應該面對的,只是打開GitHub上的問題跟蹤器fabricjs

+0

完成了,謝謝! https://github.com/kangax/fabric.js/issues/4529 – kikap