我正在学习 ReactJS,并且我开始了一个小项目来学习它。 我尝试创建一个可以通过拖动来调整大小的 div。 这是我的代码:
import { useRef, useState } from 'react'; import PostViewer from '../PostViewer/PostViewer'; import './ContainerResize.scss' import * as htmlToImage from 'html-to-image'; import { toPng } from 'html-to-image'; import download from 'downloadjs' function savePng() { htmlToImage.toPng(document.getElementById('Resizable')) .then(function (dataUrl) { download(dataUrl, 'tweet.png'); }); } const ContainerResize = (props) => { const [initialPos, setInitialPos] = useState(null); const [initialSize, setInitialSize] = useState(null); const resizable = useRef(null); const initial = (e) => { setInitialPos(e.clientX); setInitialSize(resizable.current.offsetWidth); console.log(resizable.current.offsetWidth) } const resizeLeft = (e) => { resizable.current.style.width = `${parseInt(initialSize) + parseInt(initialPos - e.clientX)}px`; } const resizeRight = (e) => { resizable.current.style.width = `${parseInt(initialSize) + parseInt(e.clientX - initialPos)}px`; } return ( <div className="containerResize"> <button onClick={savePng}>Save</button> <div id="Draggable" draggable="true" onDragStart={initial} onDrag={resizeLeft} /> <div id="Resizable" ref={resizable}> <PostViewer tweetParam={props.tweetParam} /> </div> <div id="Draggable" draggable="true" onDragStart={initial} onDrag={resizeRight} /> </div> ); } export default ContainerResize;
右侧的调整大小工作正常,但左侧的调整大小不起作用。事实上,当我用左侧拖动时,div 会正确调整大小,但是当我放下按钮时,div 会重新占据其初始位置。
请问您有解决我的问题吗?
非常感谢您的回复:)
P粉0068477502024-03-29 13:04:49
这是一个超级烦人的错误。问题是,当在 onDrag 期间释放鼠标时,会触发该事件,并将 event.clientX
设置为 0。
对此问题的快速解决方法是检查 event.clientX === 0
是否并从函数中返回。