如何在画布上拖放图像元素与 React?
您可以使用原生 HTML5 拖放功能将图像(或其他元素)从页面拖放到画布区域。
import React from 'react'; import { Stage, Layer, Image } from 'react-konva'; import useImage from 'use-image'; const URLImage = ({ image }) => { const [img] = useImage(image.src); return ( <Image image={img} x={image.x} y={image.y} // 我将使用偏移量将原点设置为图像的中心 offsetX={img ? img.width / 2 : 0} offsetY={img ? img.height / 2 : 0} draggable /> ); }; const App = () => { const dragUrl = React.useRef(); const stageRef = React.useRef(); const [images, setImages] = React.useState([]); return ( <div> 尝试将图像拖放到舞台上: <br /> <img alt="lion" src="https://konvajs.org/assets/lion.png" draggable="true" onDragStart={(e) => { dragUrl.current = e.target.src; }} /> <div onDrop={(e) => { e.preventDefault(); // 注册事件位置 stageRef.current.setPointersPositions(e); // 添加图像 setImages( images.concat([ { ...stageRef.current.getPointerPosition(), src: dragUrl.current, }, ]) ); }} onDragOver={(e) => e.preventDefault()} > <Stage width={window.innerWidth} height={window.innerHeight} style={{ border: '1px solid grey' }} ref={stageRef} > <Layer> {images.map((image) => { return <URLImage image={image} />; })} </Layer> </Stage> </div> </div> ); }; export default App;