【发布时间】:2019-10-28 10:34:40
【问题描述】:
我最近一直在尝试使用 fabricjs。我正在尝试在概念上创建类似于 krita/gimp 之类的光栅编辑器的图层组结构(层次结构)。换句话说,组内可能有组。从其他几个问题看来,这应该得到支持,但由于两种看似不一致的行为,我感到困惑。如果有人能打破我所做的错误假设,我将不胜感激。
-按组定位项目。创建简单的层次结构后,我的组的相对位置似乎没有意义(父组的定位似乎不适用)https://jsfiddle.net/od259pct/3/
var canvas = new fabric.Canvas("t2", {
// preserveObjectStacking : true
});
canvas.setHeight(130);
canvas.setWidth(130);
var layers = {};
var layer_groups = {};
var rect1 = new fabric.Rect({
'top':0,
'left':0,
'width':30,
'height':30,
'fill':'red'
})
var rect2 = new fabric.Rect({
'top':0,
'left':0,
'width':30,
'height':30,
'fill':'yellow'
})
// contains groups 2 and 3
// modifying "top" and "left" seems to have no effect?
var group1 = new fabric.Group([],{
'top':50,
'left':20,
})
//will contain rect1 (red)
var group2 = new fabric.Group([],{
'top':0,
'left':0,
})
// will contain rect2 (yellow)
var group3 = new fabric.Group([],{
'top':0,
'left':0,
})
group1.addWithUpdate(group2)
group2.addWithUpdate(rect1)
canvas.add(group1)
group1.addWithUpdate(group3)
group3.addWithUpdate(rect2)
-Z 组的索引。我看到多个答案建议使用 .moveTo() 或 group.bringForward() 但是,这些似乎都没有对组内的组产生任何影响。其次,从未解释过这些函数中使用的索引值对于整个画布是绝对的还是仅在该组中是绝对的。 https://jsfiddle.net/od259pct/4/
var canvas = new fabric.Canvas("t2", {
// preserveObjectStacking : true
});
canvas.setHeight(130);
canvas.setWidth(130);
var layers = {};
var layer_groups = {};
var rect1 = new fabric.Rect({
'top':0,
'left':0,
'width':30,
'height':30,
'fill':'red'
})
var rect2 = new fabric.Rect({
'top':0,
'left':0,
'width':30,
'height':30,
'fill':'yellow'
})
// contains groups 2 and 3
var group1 = new fabric.Group([],{
'top':0,
'left':0,
'width':30,
'height':30,
})
//will contain rect1 (red)
var group2 = new fabric.Group([],{
'top':0,
'left':0,
'width':30,
'height':30,
})
// will contain rect2 (yellow)
var group3 = new fabric.Group([],{
'top':0,
'left':0,
'width':30,
'height':30,
})
group1.add(group2)
group2.add(rect1)
canvas.add(group1)
group1.add(group3)
group3.add(rect2)
// none of these seem to work (trying to move the yellow rect group under the red rect group)
group1.sendBackwards(group3)
canvas.sendBackwards(group3)
// nor these
group1.bringForwards(group2)
canvas.bringForwards(group2)
【问题讨论】:
标签: javascript fabricjs