ネストされたグループに関するいくつかの問題を発見しました。
少しのコードから始めます。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 に対して実行すると、2 番目のグループが再びステージに対して 210, 210 に配置されていることがわかります。このバージョンで緑色の四角をクリックしようとすると、位置が表示され、JavaScript エラーが発生せずに四角が完全に消えます。ネストされたグループを使用する多くのコードがあり、これは 4.3.1 にアップグレードしようとするとどこでも発生します。グループがネストされている場合、それらをクリックすると消えてしまいます。IE9 と Firefox でこれを試してみましたが、同じ結果が得られました。
ネストされたグループの正しい絶対位置を取得する方法について何か提案はありますか?