React 快速实现拖拽改变容器宽高度

简介: React 快速实现拖拽改变容器宽高度

一、前言

有时我们需要对一个容器的宽高度进行动态的修改,

最简单直接的方法一般为:用户可以拖拽容器的边缘来改变其大小,例如下面这样的效果:

在react中,我们可以使用re-resizable这个三方库来快速的实现上面的效果。

二、re-resizable使用讲解

首先在我们的项目中安装re-resizable:

# 使用npm
npm install --save re-resizable
# 使用yarn
yarn add re-resizable

然后使用下面的代码就可以实现刚刚的效果了:

import { Resizable } from 're-resizable';
export default function Demo() {
  return (
    <Resizable defaultSize={{ width: 300, height: 300 }} style={{ margin: 30 }}>
      <div style={{ backgroundColor: 'blue', width: '100%', height: '100%' }}></div>
    </Resizable>
  );
}

re-resizable提供了许多的参数和事件:


更多参数说明可以访问官方仓库中查看,这里不再赘述。

三、更复杂的使用

有时候我们会遇到的需求会复杂一些,例如:总宽度是固定的,改变一个容器的宽度,其他容器的宽度会自动增大或减小。

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

实现的上述效果也很简单,re-resizable提供了onResize方法给我们,在我们调整宽度时,会输出其容器改变后的的位置信息:


输出如下:


所以我们可以利用该方法,将改变了多少宽度值放在state中,然后再红色容器的宽度设置中,减去该值就可以实现上述的效果了。

完整代码如下:

import { Resizable } from 're-resizable';
import { useState } from 'react';
export default function Demo() {
  const [w, setW] = useState<number>(0);
  return (
li    <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>
  );
}

四、结合antd组件

当然,是可以结合antd组件来使用的,下面的效果图来自我们的实际项目,左侧是模块树,右侧是用例列表,可以拖拽模块树边缘来动态改变二者的宽度:

目录
相关文章
|
10月前
|
移动开发 前端开发 API
React 拖拽上传组件 Drag & Drop Upload
拖拽上传(Drag & Drop Upload)是现代文件上传方式,允许用户通过简单拖拽操作将文件上传至网页。本文介绍如何在React应用中实现拖拽上传组件,涵盖HTML5拖放API、React状态管理、组件构建及常见问题解决。包括视觉反馈、文件类型和大小限制等优化措施,确保组件的用户体验和稳定性。
379 27
|
10月前
|
前端开发 JavaScript UED
React 拖拽排序组件 Draggable List
在现代Web应用中,拖拽排序功能显著提升用户体验。使用React结合`react-dnd`库,可以轻松创建高效且易于维护的拖拽排序组件。通过简单的拖拽操作,用户能直观调整列表项顺序,适用于任务管理、看板工具等场景。实现步骤包括项目初始化、安装依赖、创建基础组件、添加拖拽功能及管理状态和事件。常见问题如拖拽效果不流畅、顺序未更新等可通过性能优化、正确处理索引交换等方式解决。移动端支持也需考虑,确保跨平台的良好体验。
651 25
|
10月前
|
移动开发 前端开发 数据可视化
React 拖拽布局组件 Drag & Drop Layout
本文介绍了如何在React中构建拖拽布局组件,涵盖基础知识、常见问题及解决方案。首先解释了拖拽操作的三个阶段:开始、过程中和结束。接着推荐了几个常用的拖拽库,如`react-beautiful-dnd`,并详细展示了如何使用该库创建基础拖拽组件,包括安装依赖、初始化容器和处理拖拽结束事件。文章还探讨了常见问题,如拖拽不生效、性能优化、嵌套拖拽和跨浏览器兼容性,并提供了进阶技巧,如自定义样式、多列布局和集成其他UI组件。通过这些内容,读者可以掌握构建高效拖拽布局的方法。
702 16
|
移动开发 前端开发 JavaScript
React DnD:实现拖拽功能的终极方案?
本文首发于微信公众号“前端徐徐”,介绍了一个强大的 React 拖拽库——React DnD。React DnD 帮助开发者轻松创建复杂的拖拽界面,适用于 Trello 风格的应用、列表重排序、可拖拽的 UI 组件等场景。文章详细介绍了 React DnD 的基本信息、主要特点、使用场景及快速上手指南。
1197 3
React DnD:实现拖拽功能的终极方案?
|
12月前
|
移动开发 前端开发 API
React 拖拽组件 Drag & Drop
本文介绍了在 React 中实现拖拽功能的方法,包括使用原生 HTML5 Drag and Drop API 和第三方库 `react-dnd`。通过代码示例详细讲解了基本的拖拽实现、常见问题及易错点,帮助开发者更好地理解和应用拖拽功能。
917 10
|
前端开发 JavaScript 数据处理
React 中展示组件和容器组件
【8月更文挑战第31天】
347 0
|
前端开发 JavaScript API
React拖拽实践
React拖拽实践
218 0
|
前端开发 JavaScript API
React拖拽实践
React拖拽实践
|
前端开发
用react实现手机端限制拖拽实现
用react实现手机端限制拖拽实现
184 0
|
应用服务中间件 nginx Docker
将 react-typescript + django 部署到 nginx 容器(docker)
将 react-typescript + django 部署到 nginx 容器(docker)
200 0