【react】react项目支持鼠标拖拽的边框改变元素宽度的组件


re-resizable github地址

安装

$ npm install --save re-resizable

这将安装re-resizable库并将其保存为项目的依赖项。

使用方法

re-resizable 提供了一个 <Resizable> 组件,它可以包裹任何内容,并使其可调整大小。

示例

  1. 使用默认大小

    <Resizable
      defaultSize={{
        width: 320,
        height: 200,
      }}
    >
      Sample with default size
    </Resizable>
    

    这将创建一个初始宽度为320像素,高度为200像素的可调整大小的组件。

  2. 使用状态控制大小

    <Resizable
      size={{ width: this.state.width, height: this.state.height }}
      onResizeStop={(e, direction, ref, d) => {
        this.setState({
          width: this.state.width + d.width,
          height: this.state.height + d.height,
        });
      }}
    >
      Sample with size
    </Resizable>
    

    这个示例展示了如何使用组件的状态来控制和更新可调整大小组件的尺寸。

Props 属性

  • defaultSize: 设置拖动项的起始宽度和高度。
  • size: 控制组件的大小,可以是数字或字符串(如 '50%')。
  • className: 设置自定义类名。
  • style: 设置自定义样式。
  • minWidthminHeight: 设置最小宽度和高度。
  • maxWidthmaxHeight: 设置最大宽度和高度。
  • grid: 指定调整大小的增量。
  • lockAspectRatio: 锁定宽高比。
  • lockAspectRatioExtraWidthlockAspectRatioExtraHeight: 允许在保持宽高比的同时增加额外的宽度或高度。
  • bounds: 指定调整大小的边界。
  • handleStyles, handleClasses, handleComponent, handleWrapperStyle, handleWrapperClass: 自定义调整手柄的样式、类名、组件和包装器样式。
  • enable: 设置可调整大小的权限。
  • onResizeStart, onResize, onResizeStop: 在调整大小开始、进行中和停止时调用的回调函数。

方法

  • updateSize(size): 更新组件的大小,忽略 gridmax/minWidthmax/minHeight 属性。

示例代码

class YourComponent extends Component {
  ...

  update() {
    this.resizable.updateSize({ width: 200, height: 300 });
  }

  render() {
    return (
      <Resizable ref={c => { this.resizable = c; }}>
        example
      </Resizable>
    );
  }

  ...
}

在这个示例中,update 方法用于通过引用调用 updateSize 方法来更新可调整大小组件的大小。

re-resizable 提供了丰富的API和灵活的配置选项,使得在React应用中实现自定义的可调整大小界面元素变得简单。

总宽度是固定的,改变一个容器的宽度,其他容器的宽度会自动增大或减小。

如下图所示,有两个并排排列,颜色不同的容器,拖拽蓝色容器的右边缘可动态改变二者的宽度

调整兄弟div的宽度

例如:总宽度是固定的,改变一个容器的宽度,其他容器的宽度会自动增大或减小。

如下图所示,有两个并排排列,颜色不同的容器,拖拽蓝色容器的右边缘可动态改变二者的宽度
在这里插入图片描述
实现的上述效果也很简单,re-resizable提供了onResize方法给我们,在我们调整宽度时,会输出其容器改变后的的位置信息:
在这里插入图片描述
所以我们可以利用该方法,将改变了多少宽度值放在state中,然后再红色容器的宽度设置中,减去该值就可以实现上述的效果了。

import { Resizable } from 're-resizable';
import { useState } from 'react';

export default function Demo() {
  const [w, setW] = useState<number>(0);
  return (
   <div style={{ display: 'flex', margin: 30 }}>
      <Resizable defaultSize={{ width: 400, height: 300 }} maxWidth={700} onResize={(e: any) => setW(e.x - 400)}>
        <div style={{ backgroundColor: 'blue', width: '100%', height: '100%' }}></div>
      </Resizable>
      <div style={{ backgroundColor: 'red', width: `calc(400px - ${w}px)`, height: 300 }}></div>
    </div>
  );
}

相关推荐

  1. C#鼠标边框浮动窗体方法:窗体控制

    2024-06-10 06:44:02       11 阅读
  2. canvas中实现画布内元素(下)

    2024-06-10 06:44:02       50 阅读
  3. Unity 鼠标3D物体跟随移动方法

    2024-06-10 06:44:02       20 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-10 06:44:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-10 06:44:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-10 06:44:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-10 06:44:02       20 阅读

热门阅读

  1. Web前端电话咨询:深度解析与实用指南

    2024-06-10 06:44:02       8 阅读
  2. 带你学习Mybatis之mybatis实现分页

    2024-06-10 06:44:02       12 阅读
  3. 联邦学习中的非独立同分布Non-IID

    2024-06-10 06:44:02       9 阅读
  4. Elasticsearch 认证模拟题 - 12

    2024-06-10 06:44:02       10 阅读
  5. C++模板知识点总结

    2024-06-10 06:44:02       9 阅读
  6. Linux配置uwsgi环境

    2024-06-10 06:44:02       10 阅读
  7. Android防抖

    2024-06-10 06:44:02       11 阅读
  8. 高通Android 12/13添加/移除不被清理后台应用

    2024-06-10 06:44:02       9 阅读