【问题标题】:KonvaJS: Group's Coordinates With Respect to Childrens' CoordinatesKonvaJS:关于儿童坐标的组坐标
【发布时间】:2016-08-09 14:43:35
【问题描述】:

我在我的项目中使用 KonvaJs。我正在使用Konva.GroupKonva.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) 并且棒状碎片开始跟随鼠标指针一样。以及组的坐标和它的孩子之间的关系是什么。

【问题讨论】:

    标签: javascript konvajs


    【解决方案1】:

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

    当您在 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

    【讨论】:

    • 感谢您的澄清。它帮助我解决了有关职位的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多