vxe-table 列宽与行高拖拽调整:让表格布局极其灵活,拖拽功能非常强大

在数据表格应用中,允许用户通过拖拽调整列宽和行高是提升交互体验的重要功能。vxe-table 提供了简洁的配置项来启用这两项能力,让表格布局更加灵活。

配置说明

配置项 类型 说明
columnConfig.resizable Boolean 设为 true 后,所有列均可通过拖拽调整宽度。
column.minWidth Number 可选,限制最小宽度,避免拖拽过窄。
column.maxWidth Number 可选,限制最大宽度。

列宽拖拽调整

通过设置 columnConfig.resizable = true,即可启用列宽拖拽功能。用户将鼠标移动到列边框时,光标会变为拖拽样式,按住拖拽即可调整该列的宽度。

html 复制代码
<template>
  <div>
    <vxe-grid v-bind="gridOptions"></vxe-grid>
  </div>
</template>

<script setup>
import { reactive } from 'vue'

const gridOptions = reactive({
  border: true,
  columnConfig: {
    resizable: true
  },
  columns: [
    { type: 'seq', width: 70 },
    { field: 'name', title: '最小宽', width: 500 },
    { field: 'role', title: 'Role', width: 400 },
    { field: 'sex', title: 'Sex', width: 300 },
    { field: 'age', title: 'Age', width: 600 },
    { field: 'address', title: 'Address', width: 400 }
  ],
  data: [
    { id: 10001, name: 'Test1', role: 'Develop', sex: 'Man', age: 28, address: 'test abc' },
    { id: 10002, name: 'Test2', role: 'Test', sex: 'Women', age: 22, address: 'Guangzhou' },
    { id: 10003, name: 'Test3', role: 'PM', sex: 'Man', age: 32, address: 'Shanghai' },
    { id: 10004, name: 'Test4', role: 'Designer', sex: 'Women', age: 24, address: 'Shanghai' }
  ]
})
</script>

配置说明

配置项 类型 说明
rowConfig.resizable Boolean 设为 true 后,所有行均可通过拖拽调整高度。
column.rowResize Boolean 指定该列作为拖拽把手,用户需要拖拽该列所在的行边框。通常设置在第一列(如序号列)。

行高拖拽调整

通过设置 rowConfig.resizable = true 启用行高拖拽功能。用户将鼠标移动到行边框时,同样会出现拖拽光标,按住拖拽即可调整该行的高度。同时支持高性能的虚拟渲染,秒级渲染万级数据

html 复制代码
<template>
  <div>
    <vxe-grid v-bind="gridOptions"></vxe-grid>
  </div>
</template>

<script setup>
import { reactive } from 'vue'

const gridOptions = reactive({
  border: true,
  height: 400,
  rowConfig: {
    resizable: true
  },
  columns: [
    { type: 'seq', width: 70, rowResize: true },
    { field: 'name', title: 'Name' },
    { field: 'sex', title: 'Sex' },
    { field: 'age', title: 'Age' }
  ],
  data: [
    { id: 10001, name: 'Test1', role: 'Develop', sex: 'Man', age: 28, address: 'test abc' },
    { id: 10002, name: 'Test2', role: 'Test', sex: 'Women', age: 22, address: 'Guangzhou' },
    { id: 10003, name: 'Test3', role: 'PM', sex: 'Man', age: 32, address: 'Shanghai' },
    { id: 10004, name: 'Test4', role: 'Designer', sex: 'Women', age: 24, address: 'test abc' },
    { id: 10005, name: 'Test5', role: 'Develop', sex: 'Women', age: 45, address: 'Shanghai' },
    { id: 10006, name: 'Test6', role: 'Test', sex: 'Man', age: 56, address: 'Guangzhou' },
    { id: 10007, name: 'Test7', role: 'PM', sex: 'Man', age: 38, address: 'Guangzhou' },
    { id: 10008, name: 'Test8', role: 'Develop', sex: 'Man', age: 39, address: 'Guangzhou' },
    { id: 10009, name: 'Test9', role: 'Develop', sex: 'Women', age: 24, address: 'Shanghai' },
    { id: 10010, name: 'Test10', role: 'Test', sex: 'Women', age: 34, address: 'test abc' }
  ]
})
</script>

最佳实践

功能 注意事项
列宽拖拽 1. 如果列设置了 minWidth / maxWidth,拖拽范围会自动受限于该区间。2. 固定列(fixed)与非固定列之间的拖拽行为可能存在边缘情况,建议固定列数量不要过多。3. 列宽调整后,可通过 column-config.minWidth 全局限制最小宽度,避免过窄导致内容不可读。
行高拖拽 1. 行高拖拽适合数据量较小的表格;对于大数据量,建议使用虚拟滚动 + setRowHeight 动态控制,而不是让用户逐行拖拽。2. 如果启用了虚拟滚动(virtualYConfig.enabled),行高拖拽可能会与虚拟滚动的固定行高冲突,此时应使用 setRowHeight 方法替代。3. 行高拖拽的"把手"通常只设置在一列(例如序号列),避免多列都出现拖拽光标造成混淆。
性能 配合虚拟滚动,高性能的拖拽,即使是海量数据,拖拽依然丝滑流畅。
  • vxe-table 通过极简的配置(columnConfig.resizable 和 rowConfig.resizable)为用户提供了直观的列宽、行高拖拽调整能力。这两项功能极大地增强了表格的交互友好性,让用户可以根据实际内容自由调整表格布局。

vxetable.cn

相关推荐
慧一居士14 小时前
Element Plus 按需引入的配置使用说明和完整示例
前端·vue.js
CoderWeen18 小时前
我写了个能一步步点着看的 Dijkstra 可视化项目(Vue3 + Leaflet + Generator)
前端·javascript·vue.js
无人生还19 小时前
第 1 篇:从 Vue3 到 React 的思维转变
前端·vue.js·react.js
就业发动机19 小时前
我用 Tauri 做了一个约 1.5 MB 的开源屏幕标注工具:MarkerOn
vue.js·rust
爱分享的程序猿-Clark19 小时前
【前端分享】vue开发项目,如何实现 从A页面跳转到B页面,并传值!
前端·javascript·vue.js
徐小夕20 小时前
花了3天,我写了一款开源AI公众号编辑器
前端·vue.js·github
come1123421 小时前
Vue 2 与 Vue 3 语法区别及使用技巧
前端·javascript·vue.js
腻害兔21 小时前
【若依项目-产品经理视角】RuoYi-Vue-Pro 源码拆解:ERP 企业资源模块,一个轻量级进销存的完整实现?
前端·javascript·vue.js·人工智能·前端框架·产品经理·ai编程
Simon_He21 小时前
AI 对话里的流式 Markdown 为什么难:从不完整 Token 到增量渲染
vue.js
达子6661 天前
第4章_图解HarmonyOS 的结构
vue.js