我在嵌套组周围发现了一些问题。
从一些代码开始。我已经针对动能库的 v4.2.0 和 4.3.1 尝试了此代码。每个版本都给了我不同的行为,但都不是正确的,所以我将描述两者。这是代码:
<script>
var stage = new Kinetic.Stage({
container: "container",
x: 0,
y: 0,
width: 1000,
height: 800
});
var layer = new Kinetic.Layer();
stage.add(layer);
var grp1 = new Kinetic.Group(
{
id: 'grp1',
name: 'grp1',
height: 100,
width: 100,
draggable: true
});
grp1.setAbsolutePosition(100, 100);
var sqr1 = new Kinetic.Rect({
x: 100,
y: 100,
width: 100,
height: 100,
fill: '#FFFFFF',
stroke: '#000000',
strokeWidth: .4,
id: 'sqr1',
name: 'sqr1'
});
grp1.add(sqr1);
var grp2 = new Kinetic.Group(
{
id: 'grp2',
name: 'grp2',
height: 50,
width: 50,
draggable: true
});
grp2.setAbsolutePosition(110, 110);
var sqr2 = new Kinetic.Rect({
x: 110,
y: 110,
width: 50,
height: 50,
fill: '#FFFFFF',
stroke: '#00FF00',
strokeWidth: .4,
id: 'sqr2',
name: 'sqr2'
});
grp2.add(sqr2);
grp1.add(grp2);
layer.add(grp1);
grp2.on('click', function (evt) {
var pos = grp2.getAbsolutePosition();
alert(pos.x + ', ' + pos.y);
});
layer.draw();
</script>
如果您针对 v4.2.0 运行此程序,您将看到 grp2 不是放置在相对于舞台的 110、110 处,而是相对于舞台放置在 210、210 处(单击绿色方块以查看它的位置)。我尝试删除 setAbsolutePosition 调用,然后它会正确绘制组,但是如果您拖动组然后再次单击绿色方块,您将看到该位置现在相对于嵌套组的初始位置,而不是阶段。
如果您针对 v4.3.1 运行上述代码,您将看到第二组再次放置在相对于舞台的 210、210 处。如果您尝试单击此版本下的绿色方块,则会显示该位置,然后该方块将完全消失,不会引发任何 javascript 错误。我有很多使用嵌套组的代码,当我尝试升级到 4.3.1 时,到处都会发生这种情况 - 如果组是嵌套的,当我单击它们时,事情就会消失。我在 IE9 和 Firefox 中尝试过,结果相同。
有没有人对如何获得嵌套组的正确绝对位置有任何建议?