react实现拖拽改变div元素的大小

import React, { useState, useRef } from 'react';
import './ResizableDiv.css'; 

const ResizableDiv: React.FC = () => {
    const [width, setWidth] = useState(200); // 初始宽度
    const resizableRef = useRef<HTMLDivElement>(null);
    const isDragging = useRef(false);

    const handleMouseDown = () => {
        isDragging.current = true;
        document.addEventListener('mousemove', handleMouseMove);
        document.addEventListener('mouseup', handleMouseUp);
    };

    const handleMouseMove = (event: MouseEvent) => {
        if (isDragging.current && resizableRef.current) {
            const newWidth = event.clientX - resizableRef.current.getBoundingClientRect().left;
            setWidth(newWidth > 50 ? newWidth : 50); // 设置最小宽度为50px
        }
    };

    const handleMouseUp = () => {
        isDragging.current = false;
        document.removeEventListener('mousemove', handleMouseMove);
        document.removeEventListener('mouseup', handleMouseUp);
    };

    return (
        <div
            ref={resizableRef}
            className="resizable-div"
            style={{ width: `${width}px` }}
        >
            <div className="resizable-div-content">
                内容
            </div>
            <div
                className="resizable-div-handle"
                onMouseDown={handleMouseDown}
            />
        </div>
    );
};

export default ResizableDiv;
.resizable-div {
    display: flex;
    align-items: center;
    border: 1px solid #ccc;
    position: relative;
}

.resizable-div-content {
    flex-grow: 1;
    padding: 10px;
}

.resizable-div-handle {
    width: 10px;
    cursor: ew-resize;
    background-color: #ccc;
    position: absolute;
    right: 0;
    top: 0;
    bottom: 0;
}

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值