javascript - KonvaJS:组坐标相对于 child 坐标

标签 javascript konvajs

我在我的项目中使用 KonvaJs。我正在使用 Konva.Group 将一些项目(例如 Konva.ImageKonva.Rect)组合在一起。但是我在使用 mousemove 事件将它们放置在特定位置时面临一些挑战。我有像这样的 Konva.Group:

 var group = new Konva.Group({
      x: 0,
      y: 0
    });

还有像这样的图像和矩形

var border = new Konva.Rect({
      x: 115,
      y: 35,
      width: 116,
      height: 128,
      fill: 'grey'
    });

yoda = new Konva.Image({
        x: 120,
        y: 40,
        image: imageObj,
        width: 106,
        height: 118
      });

这是plunkr

现在我想做的是将组移动到鼠标指针所在的位置。为此,我正在这样做:

stage.on('mousemove', function(e) {
      var point=stage.getPointerPosition();
      //Don't know why this is not puttig the group childern poperly
      //group.position(stage.getPointerPosition());
      yoda.position(point);
      border.position({
        x: point.x-5,
        y: point.y-5
      })
      layer.batchDraw();
    });

因为这里我只有两个元素,所以我可以将它们一一移动,但是如果我的组中的元素或子元素的数量会增加。我无法将它们一一移动。我尝试移动整个组,但它不跟随指针位置。我想了解如何以这样的方式放置棋子:我只需执行 group.position(position) 并且俱乐部棋子开始跟随鼠标指针。还有 Group 的坐标与其子项之间的关系是什么。

最佳答案

您可能会出现意外行为,因为您的子节点被移动到组内。

当您在 x = 120 y = 140 中创建图像时。当您将组位置设置为(例如)x= 100 y = 100 时,图像将放置在 x = 210 (120 + 100) y = 240 中(140 + 100)。

只需减少子元素的位置即可:

      yoda = new Konva.Image({
        x: 5,
        y: 5,
        image: imageObj,
        width: 106,
        height: 118
      });

      group.add(border);
      group.add(yoda);

http://plnkr.co/edit/TkTGAw0eGHF5flbVYLuQ?p=preview

关于javascript - KonvaJS:组坐标相对于 child 坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38853911/

相关文章:

javascript - 如何将 alpha 与图像合成相结合?

javascript - 如何在 Konva js 中渲染矩形周围的圆圈?

javascript - 从/到 Javascript/jQuery 渲染数据

javascript - 如何在 vaadin 页面中集成 google-maps?

javascript - 如何在 HTML/使用 CSS 中制作 "non-droppable group"?

stage - 在html中绘制Konvajs容器Stage的边框边缘

HTML5 Canvas 叠加图像

javascript - 在 Konva JS 中拖动后获取形状的 X 和 Y

javascript - 如何访问作为复杂对象返回的 AngularJS 数据 (Pubnub)

javascript - 将高级自定义字段添加到 javascript