Skip to main content

如何找到相对鼠标位置?

在某些情况下,您可能需要找到相对于某个节点的点的位置。为此,我们可以使用数学的 Konva.Transform 方法。

在本示例中,我们有深层嵌套的变换节点:移动的舞台、缩放的图层、旋转的组。 现在我们想在点击时向组中添加圆圈。但是,如何找到这些圆圈的位置呢? 我们不能直接使用 stage.getPointerPosition(),因为该方法返回的是相对于舞台左上角的位置。

这个想法很简单。我们只需要使用反转的绝对变换。

import Konva from 'konva';

var width = window.innerWidth;
var height = window.innerHeight;

var stage = new Konva.Stage({
  container: 'container',
  width: width,
  height: height,
  x: 20,
  y: 50,
});

var layer = new Konva.Layer({
  scaleX: 1.2,
  scaleY: 0.8,
  rotation: 5,
});
stage.add(layer);

var group = new Konva.Group({
  x: 30,
  rotation: 10,
  scaleX: 1.5,
});
layer.add(group);

var text = new Konva.Text({
  text: '点击画布以绘制圆圈',
  fontSize: 20,
});
group.add(text);

stage.on('click', function () {
  var pos = group.getRelativePointerPosition();
  var shape = new Konva.Circle({
    x: pos.x,
    y: pos.y,
    fill: 'red',
    radius: 20,
  });

  group.add(shape);
});