在 Konva(准确地说是 React-Konva)上,有一个 Stage 带有一个带有图像的图层。单击该图像会给出单击该图像的位置。但拖动后(舞台或图像),位置不同。
在 React-Konva 代码中,这看起来基本上是这样的:
<Stage width={2000} height={2000} draggable={true}>
<Layer>
<MyImage url="_some_url_pointing_to_a_png_" />
</Layer>
</Stage>
MyImage 组件:
const MyImage = (props) => {
const url = props.url;
const [image, status, width, height] = useImage(url);
return (
<Image
image={image}
width={width}
height={height}
onClick={clickHandler}
/>
);
};
(是的,我修改了useImage React-Hook也返回了宽度和高度)
clickHandler 非常简单:
const clickHandler = (e) => {
const stage = e.target.getStage();
const stageLocation = stage.getPointerPosition();
console.table(stageLocation);
};
问题是单击该图像确实给了我一个位置,这看起来不错。但是当我拖动图像时,由于舞台上的'draggable={true}'(因此,准确地说是'拖动舞台')然后再次单击图像中的相同位置,我得到另一个位置。这可能很明显,因为它给了我点击在舞台上的位置,而不是点击在图像上的位置。
当使舞台不可拖动和图像可拖动时,同样的问题也适用。
所以,问题仍然存在:
当图像(或其舞台)可拖动时,如何获取图像上单击的位置?