在某些情况下,您可能需要找到一个点相对于一个节点的位置。为此,我们可以使用数学的 Konva.Transform
方法。
在这个示例中,我们有深度嵌套的变换节点:移动的舞台、缩放的图层和旋转的组。
现在我们想在组中点击时添加圆形。但是我们如何找到这些圆形的位置呢?
我们不能直接使用 stage.getPointerPosition()
,因为那是相对于舞台左上角的位置。
这个想法很简单。我们只需使用反转的绝对变换。
相对指针位置演示view raw<!DOCTYPE html> <html> <head> <script src="https://unpkg.com/konva@9.3.18/konva.min.js"></script> <meta charset="utf-8" /> <title>Konva Relative Pointer Position Demo</title> <style> body { margin: 0; padding: 0; overflow: hidden; background-color: #f0f0f0; } </style> </head>
<body> <div id="container"></div> <script> 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: 'Click on the canvas to draw a circle', 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); }); </script> </body> </html>
|