当前位置: 首页 > news >正文

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

目录

  • 安装
  • 使用方法
  • 示例
  • Props 属性
  • 方法
  • 示例代码
  • 调整兄弟div的宽度

re-resizable github地址

安装

$ npm install --save re-resizable

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

使用方法

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

示例

  1. 使用默认大小

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

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

  2. 使用状态控制大小

    <Resizablesize={{ 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>);
}

相关文章:

  • 纳什均衡:博弈论中的运作方式、示例以及囚徒困境
  • 如何将AndroidStudio和IDEA的包名改为分层级目录
  • python --监听鼠标事件
  • k8s——安全机制
  • 【机器学习】我们该如何评价GPT-4o?GPT-4o的技术能力分析以及前言探索
  • DevOps入门
  • Tomcat相关概述和部署
  • 力扣第417题测试程序
  • Java微服务实战:使用Spring Boot构建高效服务
  • kv视频如何转码mp4格式,kv转换mp4最简单方法
  • 填充每个节点的下一个右侧节点指针-力扣
  • Vuex3学习笔记
  • Linux fallocate工具用于预分配或释放文件空间的块
  • 应用解析 | 面向智能网联汽车的产教融合解决方案
  • 代码随想录算法训练营第三十二天|122.买卖股票的最佳时机II 55. 跳跃游戏 45.跳跃游戏II
  • Android框架之Volley
  • ES6--对象的扩展
  • ES学习笔记(12)--Symbol
  • iBatis和MyBatis在使用ResultMap对应关系时的区别
  • Js基础——数据类型之Null和Undefined
  • Laravel 中的一个后期静态绑定
  • Redis在Web项目中的应用与实践
  • v-if和v-for连用出现的问题
  • 阿里云爬虫风险管理产品商业化,为云端流量保驾护航
  • 从0实现一个tiny react(三)生命周期
  • 关于Java中分层中遇到的一些问题
  • 回顾 Swift 多平台移植进度 #2
  • 简单数学运算程序(不定期更新)
  • 悄悄地说一个bug
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 实习面试笔记
  • 【运维趟坑回忆录 开篇】初入初创, 一脸懵
  • #gStore-weekly | gStore最新版本1.0之三角形计数函数的使用
  • $.ajax,axios,fetch三种ajax请求的区别
  • (CVPRW,2024)可学习的提示:遥感领域小样本语义分割
  • (pojstep1.1.2)2654(直叙式模拟)
  • (二)正点原子I.MX6ULL u-boot移植
  • (附源码)springboot工单管理系统 毕业设计 964158
  • (附源码)计算机毕业设计高校学生选课系统
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • *(长期更新)软考网络工程师学习笔记——Section 22 无线局域网
  • .net core 连接数据库,通过数据库生成Modell
  • .net refrector
  • .NET 程序如何获取图片的宽高(框架自带多种方法的不同性能)
  • .net 简单实现MD5
  • .NET/C# 项目如何优雅地设置条件编译符号?
  • .NET的微型Web框架 Nancy
  • .NET轻量级ORM组件Dapper葵花宝典
  • [AIGC] 如何建立和优化你的工作流?
  • [AndroidStudio]_[初级]_[修改虚拟设备镜像文件的存放位置]
  • [BZOJ1008][HNOI2008]越狱
  • [bzoj1038][ZJOI2008]瞭望塔
  • [C++] 统计程序耗时
  • [dfs搜索寻找矩阵中最长递减序列]魔法森林的秘密路径
  • [flask] flask的基本介绍、flask快速搭建项目并运行