【问题标题】:Moving a Polygon with react-kova - update the position使用 react-kova 移动多边形 - 更新位置
【发布时间】:2021-05-31 15:02:35
【问题描述】:

我使用嵌入在 React 中的 Konva。我尝试移动使用完成线创建的多边形。角点是可拖动的。方法应该很简单。您使用点坐标并添加相对位置。我的问题是角点按预期移动。多边形本身的移动速度是原来的两倍。我怀疑框架的位置已经在内部计算过,我在顶部添加了移动距离。如果我不这样做,角点就会留在后面,这也是不希望的。

负责该位置的句柄在这里:

 
  handleDragMoveLine = event => {

    let i;
    const points = this.state.points;
    const init_points = this.state.init_points;
    for(i = 0; i < points.length; i++) {
      let point = points[i];
      let init_point = init_points[i];
      point[0] = parseFloat(init_point[0]) + parseFloat(event.target.x());
      point[1] = parseFloat(init_point[1]) + parseFloat(event.target.y());
      points[i] = point;
    }
    // console.log("points", points);
    this.setState({
      points: points,
      flat_points: points.concat(this.state.isFinished ? [] : this.state.curMousePos).reduce((a, b) => a.concat(b), [])
    });

  };

我修改的完整示例在这里: https://codesandbox.io/s/fast-star-igu4v

感谢您的每一次帮助。提前致谢!

【问题讨论】:

    标签: konvajs react-konva konva


    【解决方案1】:

    在拖动动作时,Konva 正在改变 xy 坐标。

    当您将xy 更改为points 属性时,您将获得双重效果。因为 (1) xy 是变化的,而 (2) 点也是变化的。

    有很多不同的方法可以解决这个问题。

    1。将xy 重置为原始{0, 0}

    event.position({ x: 0, y: 0})
    

    https://codesandbox.io/s/peaceful-chebyshev-0n2vw?file=/src/App.js

    2。将行的位置保存到状态中

    因此,您所在的州不仅有points,还有xy 职位。这样您就可以通过该位置调整锚点的位置。

    3。制作不同的节点结构,因此将锚线放置在一个可拖动组内

    <Group draggable>
      <Line/>
      <Anchors/>
    </Group>
    

    【讨论】:

    • 感谢您的回答。使用第一个选项,线(多边形)有时会跳转到其初始位置。我尝试了前两个选项。使用第一个选项,多边形在移动时非常跳跃。它似乎幻影到它的初始位置(或放下动作的最后一个位置)。在 Firefox 中,它似乎不像在基于 Chromium 的浏览器(Chrome 和 Edge)中那样跳跃。有什么治疗方法吗?
    • 对于第二个选项……我不知道在状态下存储和调整哪个X和Y位置。您在第一个选项中描述的相同吗?我只知道文档中描述的那些:link。我尝试了一些,但行为完全搞砸了。
    • 我简单地尝试了第三个选项,将我的组件包装在一个 Group 元素中,这在第一次尝试时不起作用。由于我有听众,我需要更深入地重构这个例子,我没有强调到最后。移除监听器并为我的 Line 和 Anchor 元素配备类似的属性,例如此处的示例 link 不起作用。
    猜你喜欢
    • 1970-01-01
    • 2022-12-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-11
    • 2011-03-08
    • 1970-01-01
    • 1970-01-01
    • 2016-06-01
    相关资源
    最近更新 更多