当前位置:首页 > 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方案适合已使用该组件库的项目。

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

相关文章

css好看的表格制作

css好看的表格制作

使用CSS制作美观表格的方法 边框与间距优化 通过border-collapse属性合并边框,避免双边框效果。设置padding增加单元格内边距,提升可读性。 table { border-…

vue实现拖拽实现布局

vue实现拖拽实现布局

Vue 实现拖拽布局的方法 使用 Vue.Draggable 库 Vue.Draggable 是基于 Sortable.js 的 Vue 组件,适合实现列表或网格的拖拽排序。 安装依赖: npm…

css表格制作

css表格制作

CSS表格制作方法 使用CSS创建表格可以通过多种方式实现,以下是常见的几种方法: 使用HTML原生表格标签结合CSS样式 <table class="styled-table">…

jquery 拖拽

jquery 拖拽

jQuery 拖拽实现方法 使用 jQuery 实现拖拽功能可以通过多种方式完成,以下是常见的几种方法: 使用 jQuery UI 的拖拽功能 jQuery UI 提供了 draggable 方法,…

vue能实现拖拽

vue能实现拖拽

Vue 实现拖拽的方法 Vue 可以通过多种方式实现拖拽功能,包括原生 HTML5 的拖拽 API、第三方库如 vuedraggable 或自定义指令。以下是几种常见的实现方式: 使用 HTML5…

vue实现div拖拽

vue实现div拖拽

Vue 实现 Div 拖拽的方法 使用原生 HTML5 拖拽 API 在 Vue 中可以通过 HTML5 的拖拽 API 实现基础拖拽功能。需要为元素添加 draggable 属性,并监听 drags…