呼唤远方
如果您已经添加了一个固定在要调整大小的角上的调整大小按钮div:监听mousedown按钮上的事件在听者中,存储起始尺寸和点击位置添加一个mousemove监听onMouseMove器来document.body跟踪光标位置添加一个监听器,当拖动被释放时mouseup移除mouseMove使用光标位置的变化来div适当地调整大小。例子:const { useState } = React;function Resizeable({ children }) { const [size, setSize] = useState({ x: 400, y: 300 }); const handler = (mouseDownEvent) => { const startSize = size; const startPosition = { x: mouseDownEvent.pageX, y: mouseDownEvent.pageY }; function onMouseMove(mouseMoveEvent) { setSize(currentSize => ({ x: startSize.x - startPosition.x + mouseMoveEvent.pageX, y: startSize.y - startPosition.y + mouseMoveEvent.pageY })); } function onMouseUp() { document.body.removeEventListener("mousemove", onMouseMove); // uncomment the following line if not using `{ once: true }` // document.body.removeEventListener("mouseup", onMouseUp); } document.body.addEventListener("mousemove", onMouseMove); document.body.addEventListener("mouseup", onMouseUp, { once: true }); }; return ( <div id="container" style={{ width: size.x, height: size.y }}> <button id="draghandle" type="button" onMouseDown={handler} >Resize</button> </div> );}ReactDOM.render(<Resizeable />, document.getElementById("root"));#root { height: 100vh; width: 100vw;}#container { position: relative; background-color: lightpink; border: solid red 1px;}#draghandle { position: absolute; bottom: 0; right: 0; transform: translate(50%, 50%);}<script crossorigin src="https://unpkg.com/react@16/umd/react.development.js"></script><script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script><div id="root"></div>请注意,只有mousedown事件应用于button,而其他处理程序应用于document.body。这可确保快速将光标移离button不会导致错过事件。