javascript - 拖动到不同位置后如何更新图像的 x 和 y 坐标?

标签 javascript reactjs konvajs

我有一个带有图像的 konva Canvas ,我可以在其中将图像添加到 Canvas 并四处拖动它们。图像是可以拖到 Canvas 上的 DOM 元素,如下所示:

{loadImages.map(image => (
  <img id="img" className="img"
  src={image.image}
  width="200"
  height="200"
  onDragStart={(e) => {
    dragUrl.current = e.target.src;}}
/>
))}
    
    <div
        onDrop={(e) => {
          e.preventDefault();
          // register event position
          stageEl.current.setPointersPositions(e);
          // add image
          setImages(
            images.concat([
              {
                ...stageEl.current.getPointerPosition(),
                src: dragUrl.current,
                id: `img${images.length + 1}`
              },
            ])
          );
          socket.emit("canvas-data", [
            {
              ...stageEl.current.getPointerPosition(),
              src: dragUrl.current,
              dataType: "Image"
            },
          ])
        }}
        onDragOver={(e) => {
          e.preventDefault();
        }
        }
      >

每当将图像拖到 Canvas 上时,图像就会添加到名为 images 的数组中。每个图像都有自己的 x 和 y 坐标(取决于图像被拖动的位置)、源(它是什么图像)和 id(每次添加新图像时它都会增长 1。)

下面我有一个 onDragEnd 事件,我想在其中调整当前被拖动图像的 x 和 y 坐标(因此在数组 images 中) onDragEnd 事件:

  const URLImage = ({image}) => {
    const [img] = useImage(image.src);
    return (
      <Image
        image = {img}
        x = {image.x}
        y = {image.y}

        offsetX = {50}
        offsetY = {50}

        width={200}
        height={200}
        draggable
        onDragEnd={e => {
          
        }}

      />
    );
  };

关于如何实现这一点有什么想法吗?

最佳答案

您可以使用 e.target 访问节点的更新属性。,

const URLImage = ({ image, onChange}) => {
    const [img] = useImage(image.src);
    return (
      <Image
        image = {img}
        x = {image.x}
        y = {image.y}
        width={200}
        height={200}
        draggable
        onDragEnd={e => {
          onChange({ x: e.targe.x(), y: e.target.y()})
        }}
      />
    );
};

然后更新您的应用的状态:

<URLImage
  image={image}
  onChange={(newProps) => {
    const newImage = { ...image, ...newProps};
    // copy array of state
    const newImages = images.slice();
    newImages[index] = newImage;
    setImages(newImages);
  }}
/>

关于javascript - 拖动到不同位置后如何更新图像的 x 和 y 坐标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67906250/

相关文章:

javascript - jquery 移动更改为下一个和上一个 data-role=page

reactjs - bootstrap 在 ReactJS 代码中不起作用

javascript - 在Konva JS中,如何按比例批量调整组中所有项目的大小?

javascript - 递归搜索对象中的属性

javascript - 如何为 hls.js 创建自定义加载器?

javascript - React with Redux Warning : Failed propType: Required prop `posts` was not specified in `Posts` . 检查 `PostsContainer`的render方法

reactjs - React-Boilerplate 默认测试抛出 TypeError : Cannot read property 'store' of null

javascript - 康瓦 : get corners coordinate of a rotated rectangle

javascript - 如何使用 KonvaJS 访问 JS 中的图像属性

javascript - Wistia 视频自定义 Action