我正在学习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重新定位。
你有办法解决我的问题吗?
非常感谢你的回答:)
发布于 2022-11-03 09:11:21
这是个超级烦人的虫子。问题是,当鼠标在onDrag期间释放时,事件会被触发,event.clientX被设置为0。
解决这个问题的一个快速方法是检查event.clientX === 0是否退出该函数。
https://stackoverflow.com/questions/74287647
复制相似问题