【发布时间】:2019-12-25 20:50:26
【问题描述】:
在 Konva(准确地说是 React-Konva)上,有一个 Stage 和一个 Layer 和一个 Image。 单击该图像会给出单击该图像的位置。 但拖动后(舞台或图像),位置不同。
在 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}”(因此,准确地说是“拖动舞台”),然后再次单击图像中的相同位置,我得到另一个位置。 这可能很明显,因为它给了我点击在舞台上的位置,而不是点击在图像上的位置。
当舞台不可拖动和图像可拖动时,同样的问题也适用。
所以,问题仍然存在:
当图像(或其舞台)可拖动时,如何获取点击在图像上的位置?
【问题讨论】:
-
“点击图片的位置”到底是什么意思?您是否需要相对于图像位置的指针位置?
stage.getPointerPosition()返回指针的绝对位置。 -
'Relative' 和 'Absolute' 在此可能是令人困惑的术语。我的意思是当我有一个大象的图像时,我单击树干,然后在舞台中移动(拖动)图像(因为图像大于可见的舞台),然后再次单击树干,然后我想要同样的职位。
标签: reactjs konvajs react-konva konvajs-reactjs