【发布时间】:2020-07-29 18:10:13
【问题描述】:
我正在尝试使用 React-Konva 库实现一个操纵杆,该操纵杆可用于控制 React.JS 中的机器人之类的东西。到目前为止,我已经设法通过在一个较大的圆圈内绘制一个较小的圆圈并让较小的圆圈在鼠标按下时跟踪鼠标相对于舞台的位置来获得某种效果。它的问题是,一旦鼠标离开舞台,我就停止获取 onMouseMove 事件,并且圆圈卡在最后一个位置,直到鼠标返回舞台。理想情况下,我希望能够让圆圈在鼠标移出舞台时继续跟踪鼠标的方向,但显然限制了圆圈从原点实际移动到保持在舞台内的距离。
这是我目前的代码
import React, { useState, useContext } from "react";
import { Stage, Layer, Circle } from "react-konva";
export default function Joystick(props) {
const { size } = props;
const [x, setX] = useState(0);
const [y, setY] = useState(0);
const [down, setDown] = useState(false);
const joyX = down ? x : size / 2;
const joyY = down ? y : size / 2;
return (
<Stage
width={size}
height={size}
onMouseMove={(ev) => {
setX(ev.evt.layerX);
setY(ev.evt.layerY);
}}
onMouseDown={(ev) => setDown(true)}
onMouseUp={(ev) => setDown(false)}
>
<Layer>
<Circle x={size / 2} y={size / 2} radius={size / 2} fill="black" />
<Circle x={joyX} y={joyY} radius={size / 4} fill="white" />
</Layer>
</Stage>
);
}
那么我想知道的是什么是最简单和最干净的方法,我可以扩展它以保持跟踪鼠标,即使它超出了舞台?
【问题讨论】:
-
最终一切都在浏览器文档中,所以您可以移动听众以在顶层收听吗?
-
@VanquiishedWombat 我可以,但是尝试计算鼠标相对于 Konva 元素的位置会变得非常讨厌,或者有没有简单的方法?
-
不完全相同但非常相似:stackoverflow.com/questions/44801596/…
-
@VanquiishedWombat 谢谢
标签: javascript html reactjs konvajs react-konva