例如有如下画布层级,四张图片 添加顺序分别为 0、1、2、3,越后面的层级越高,呈现出依次盖住的效果。
这里想实现0、1为一组然后换位置到2、3的上面,但是保持0、1的层级关系,如果直接用fabric提供的group对象进行层级上下移动会造成不能拆分的情况,而且就算拆分了group变为了原来的对象层级还是跟原来的一样
由此我想到了使用集合这个属性,fabric.Collection,这是一个静态属性,不需要new出来
下面copy出来我的代码
function up(index)为当前集合上移,function down(index)为当前集合下移
function up(index) {
let arr = fabric.Collection
arr.add([canvas.getObjects()[0], canvas.getObjects()[1]])
arr.add([canvas.getObjects()[2], canvas.getObjects()[3]])
canvas.clear()
let a = arr.item(index)
arr.remove(arr.item(index))
arr.insertAt(a, index + 1)
arr.forEachObject(e => {
canvas.add(...e)
})
// for (let i = 0; i < arr.size(); i++) {
// console.table(arr.item(i), ['id']);
// }
let length = arr.size()
for (let i = 0; i < length; i++) {
arr.remove(arr.item(0))
}
// console.table(canvas.getObjects(), ['id']);
}
function down(index) {
let arr = fabric.Collection
for (let i = 0; i < arr.size(); i++) {
arr.remove(arr.item(i))
}
arr.add([canvas.getObjects()[0], canvas.getObjects()[1]])
arr.add([canvas.getObjects()[2], canvas.getObjects()[3]])
canvas.clear()
let a = arr.item(index)
arr.remove(arr.item(index))
arr.insertAt(a, index - 1)
arr.forEachObject(e => {
canvas.add(...e)
})
// for (let i = 0; i < arr.size(); i++) {
// console.table(arr.item(i), ['id']);
// }
let length = arr.size()
for (let i = 0; i < length; i++) {
arr.remove(arr.item(0))
}
// console.table(canvas.getObjects(), ['id']);
}