保留所选对象的顺序

问题描述:

我在画布上选择了多个对象(按住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

我可以确认你没有办法保持它的顺序,除非你做你正在做的事情。

请,如果你认为这是一件坏事,缺少功能什么的一个开发只是不应该面对的,只是打开GitHub上的问题跟踪器fabricjs

+0

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