마우스 이벤트를 통해 드래그하여 특정 엘레멘트의 사이즈를 조정해 볼 거다.
먼저, 마우스는 아래의 세가지 동작을 한다는 걸 이해하자
우리는 마우스를 누를 때 많은 걸 참조할 수 있다.
암튼, 코드로 작성해 보자.
const [isResizing, setIsResizing] = useState<boolean>(false);
const [initialX, setInitialX] = useState<number>(0);
const handleMouseDown = (e: React.MouseEvent) => {
setIsResizing(true);
setInitialX(e.clientX);
};
initialX
)e.clientX
)initialX - e.clientX
)코드로 작성해 보자.
const handleMouseMove = useCallback(
(e: MouseEvent) => {
if (isResizing) {
const newWidth = width + e.clientX - initialX;
setInitialX(e.clientX);
if (newWidth >= 408) {
setWidth(newWidth);
}
}
},
[isResizing, initialX, width],
);
코드로 작성해 보자.
const handleMouseUp = useCallback(() => {
setIsResizing(false);
}, []);
const [isResizing, setIsResizing] = useState<boolean>(false);
const [initialX, setInitialX] = useState<number>(0);
const [width, setWidth] = useState<number>(408);
const handleMouseDown = (e: React.MouseEvent) => {
e.preventDefault();
setIsResizing(true);
setInitialX(e.clientX);
};
const handleMouseUp = useCallback(() => {
setIsResizing(false);
}, []);
const handleMouseMove = useCallback(
(e: MouseEvent) => {
if (isResizing) {
const newWidth = width + e.clientX - initialX;
setInitialX(e.clientX);
if (newWidth >= 408) {
setWidth(newWidth);
}
}
},
[isResizing, initialX, width],
);
useEffect(() => {
if (isResizing) {
document.addEventListener('mousemove', handleMouseMove);
document.addEventListener('mouseup', handleMouseUp, { once: true });
} else {
document.removeEventListener('mousemove', handleMouseMove);
document.removeEventListener('mouseup', handleMouseUp);
}
return () => {
document.removeEventListener('mousemove', handleMouseMove);
document.removeEventListener('mouseup', handleMouseUp);
};
}, [isResizing, handleMouseMove, handleMouseUp]);