当前位置:首页 > VUE

vue实现表格列拖拽

2026-01-23 01:21:15VUE

vue实现表格列拖拽的方法

使用vuedraggable库

vuedraggable是一个基于Sortable.js的Vue拖拽组件库,适合实现表格列的拖拽功能。

安装依赖:

vue实现表格列拖拽

npm install vuedraggable --save

示例代码:

vue实现表格列拖拽

<template>
  <table>
    <thead>
      <draggable v-model="headers" tag="tr">
        <th v-for="header in headers" :key="header">{{ header }}</th>
      </draggable>
    </thead>
    <tbody>
      <tr v-for="row in rows" :key="row.id">
        <td v-for="header in headers" :key="header">{{ row[header] }}</td>
      </tr>
    </tbody>
  </table>
</template>

<script>
import draggable from 'vuedraggable'

export default {
  components: { draggable },
  data() {
    return {
      headers: ['姓名', '年龄', '性别', '职业'],
      rows: [
        { id: 1, 姓名: '张三', 年龄: 25, 性别: '男', 职业: '工程师' },
        { id: 2, 姓名: '李四', 年龄: 30, 性别: '女', 职业: '设计师' }
      ]
    }
  }
}
</script>

使用原生HTML5拖拽API

如果不希望引入额外库,可以使用HTML5原生拖拽API实现。

<template>
  <table>
    <thead>
      <tr>
        <th 
          v-for="(header, index) in headers" 
          :key="header"
          draggable="true"
          @dragstart="dragStart(index)"
          @dragover.prevent
          @drop="drop(index)"
        >
          {{ header }}
        </th>
      </tr>
    </thead>
    <tbody>
      <tr v-for="row in rows" :key="row.id">
        <td v-for="header in headers" :key="header">{{ row[header] }}</td>
      </tr>
    </tbody>
  </table>
</template>

<script>
export default {
  data() {
    return {
      headers: ['姓名', '年龄', '性别', '职业'],
      rows: [
        { id: 1, 姓名: '张三', 年龄: 25, 性别: '男', 职业: '工程师' },
        { id: 2, 姓名: '李四', 年龄: 30, 性别: '女', 职业: '设计师' }
      ],
      draggedIndex: null
    }
  },
  methods: {
    dragStart(index) {
      this.draggedIndex = index
    },
    drop(index) {
      if (this.draggedIndex !== null) {
        const headers = [...this.headers]
        const draggedItem = headers[this.draggedIndex]
        headers.splice(this.draggedIndex, 1)
        headers.splice(index, 0, draggedItem)
        this.headers = headers
        this.draggedIndex = null
      }
    }
  }
}
</script>

使用Element UI表格拖拽

如果使用Element UI组件库,可以结合其表格和拖拽功能实现。

<template>
  <el-table :data="tableData" border>
    <el-table-column
      v-for="column in columns"
      :key="column.prop"
      :prop="column.prop"
      :label="column.label"
      :fixed="column.fixed"
    />
  </el-table>
</template>

<script>
import { Sortable } from 'sortablejs'

export default {
  data() {
    return {
      columns: [
        { prop: 'date', label: '日期' },
        { prop: 'name', label: '姓名' },
        { prop: 'address', label: '地址' }
      ],
      tableData: [
        { date: '2023-01-01', name: '张三', address: '北京' },
        { date: '2023-01-02', name: '李四', address: '上海' }
      ]
    }
  },
  mounted() {
    this.rowDrop()
  },
  methods: {
    rowDrop() {
      const wrapper = document.querySelector('.el-table__header-wrapper tr')
      new Sortable(wrapper, {
        animation: 180,
        delay: 0,
        onEnd: evt => {
          const oldItem = this.columns[evt.oldIndex]
          this.columns.splice(evt.oldIndex, 1)
          this.columns.splice(evt.newIndex, 0, oldItem)
        }
      })
    }
  }
}
</script>

注意事项

  • 拖拽操作会改变数据顺序,需要确保数据同步更新
  • 对于大数据量表格,需要考虑性能优化
  • 移动端设备可能需要特殊处理触摸事件
  • 拖拽过程中可以添加视觉反馈提升用户体验

以上方法可以根据项目需求和技术栈选择合适的实现方案。vuedraggable方案最为简单,原生API方案最轻量,Element UI方案适合已使用该组件库的项目。

标签: 表格拖拽
分享给朋友:

相关文章

js实现拖拽

js实现拖拽

实现拖拽的基本步骤 通过监听鼠标事件(mousedown、mousemove、mouseup)实现拖拽功能。以下是核心代码逻辑: const draggableElement = document.…

vue element实现表格

vue element实现表格

Vue + Element UI 实现表格 Element UI 提供了强大的表格组件 el-table,结合 Vue 可以快速实现数据展示、排序、筛选等功能。 基础表格实现 安装 Element…

vue实现表格导入

vue实现表格导入

Vue 实现表格导入的方法 使用 Element UI 的 Upload 组件 Element UI 提供了 el-upload 组件,可以方便地实现文件上传功能。结合 xlsx 库解析 Excel…

vue实现简单表格

vue实现简单表格

使用 Vue 实现简单表格 Vue 提供了多种方式实现表格功能,以下是基于 Vue 3 的两种常见方法: 基础表格实现 通过 v-for 指令循环渲染表格数据: <template&…

vue实现导出表格

vue实现导出表格

Vue 实现导出表格的方法 使用 xlsx 库导出 Excel 安装 xlsx 库 npm install xlsx 在 Vue 组件中引入 xlsx import * as XLSX from…

使用vue实现表格

使用vue实现表格

使用 Vue 实现表格 Vue.js 提供了灵活的方式来实现表格功能,可以通过组合 v-for 指令和动态数据绑定快速构建表格。以下是几种常见的实现方法: 基础表格实现 通过 v-for 遍历数组数…