当前位置:首页 > VUE

vue实现元素拖拽排序

2026-02-24 17:28:37VUE

Vue 实现元素拖拽排序的方法

使用原生 HTML5 Drag and Drop API

在 Vue 中可以通过 HTML5 原生 API 实现拖拽排序。需要监听 dragstartdragoverdrop 事件。

<template>
  <div>
    <div 
      v-for="(item, index) in items" 
      :key="item.id"
      draggable="true"
      @dragstart="handleDragStart(index)"
      @dragover.prevent="handleDragOver(index)"
      @drop="handleDrop(index)"
    >
      {{ item.text }}
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: [
        { id: 1, text: 'Item 1' },
        { id: 2, text: 'Item 2' },
        { id: 3, text: 'Item 3' }
      ],
      draggedIndex: null
    }
  },
  methods: {
    handleDragStart(index) {
      this.draggedIndex = index
    },
    handleDragOver(index) {
      if (this.draggedIndex !== index) {
        const item = this.items[this.draggedIndex]
        this.items.splice(this.draggedIndex, 1)
        this.items.splice(index, 0, item)
        this.draggedIndex = index
      }
    },
    handleDrop(index) {
      this.draggedIndex = null
    }
  }
}
</script>

使用第三方库 Vue.Draggable

Vue.Draggable 是基于 Sortable.js 的 Vue 组件,提供更简单的 API 实现拖拽排序。

安装依赖:

vue实现元素拖拽排序

npm install vuedraggable

使用示例:

<template>
  <div>
    <draggable 
      v-model="items" 
      @end="onDragEnd"
    >
      <div v-for="item in items" :key="item.id">
        {{ item.text }}
      </div>
    </draggable>
  </div>
</template>

<script>
import draggable from 'vuedraggable'

export default {
  components: { draggable },
  data() {
    return {
      items: [
        { id: 1, text: 'Item 1' },
        { id: 2, text: 'Item 2' },
        { id: 3, text: 'Item 3' }
      ]
    }
  },
  methods: {
    onDragEnd() {
      console.log('排序完成', this.items)
    }
  }
}
</script>

使用 Sortable.js 直接操作 DOM

如果需要更底层的控制,可以直接使用 Sortable.js 库。

vue实现元素拖拽排序

安装依赖:

npm install sortablejs

使用示例:

<template>
  <div ref="sortableContainer">
    <div v-for="item in items" :key="item.id">
      {{ item.text }}
    </div>
  </div>
</template>

<script>
import Sortable from 'sortablejs'

export default {
  data() {
    return {
      items: [
        { id: 1, text: 'Item 1' },
        { id: 2, text: 'Item 2' },
        { id: 3, text: 'Item 3' }
      ]
    }
  },
  mounted() {
    this.initSortable()
  },
  methods: {
    initSortable() {
      new Sortable(this.$refs.sortableContainer, {
        animation: 150,
        onEnd: (evt) => {
          const movedItem = this.items[evt.oldIndex]
          this.items.splice(evt.oldIndex, 1)
          this.items.splice(evt.newIndex, 0, movedItem)
        }
      })
    }
  }
}
</script>

注意事项

  • 使用原生 API 时需要注意浏览器兼容性问题
  • 移动端支持可能需要额外处理触摸事件
  • 复杂场景下推荐使用 Vue.Draggable 或 Sortable.js
  • 拖拽过程中可能需要考虑动画效果提升用户体验

标签: 拖拽元素
分享给朋友:

相关文章

vue实现拖拽滚动

vue实现拖拽滚动

Vue 实现拖拽滚动的方法 在 Vue 中实现拖拽滚动功能,可以通过监听鼠标事件并结合 CSS 或 JavaScript 控制滚动行为。以下是几种常见的实现方式: 使用原生事件监听 通过监听 mou…

vue实现树形拖拽

vue实现树形拖拽

Vue 实现树形拖拽的方法 使用 vue-draggable 插件 安装 vue-draggable 插件: npm install vuedraggable --save 在组件中引入并使用:…

vue实现横向拖拽

vue实现横向拖拽

实现横向拖拽的基本思路 使用 Vue 实现横向拖拽功能通常涉及监听鼠标事件(mousedown、mousemove、mouseup),计算拖拽距离,并动态更新元素位置。以下是核心实现方法: 基础实现…

vue拖拽实现页面

vue拖拽实现页面

Vue拖拽实现页面的方法 使用HTML5原生拖拽API HTML5提供了原生的拖拽API,可以通过draggable属性、dragstart、dragend、dragover和drop等事件实现拖拽功…

vue实现拖拽框

vue实现拖拽框

Vue实现拖拽框的方法 使用Vue实现拖拽功能可以通过原生HTML5的拖拽API或第三方库如vuedraggable来实现。以下是两种常见的方法: 使用HTML5原生拖拽API HTML5提供了拖拽…

vue栅格拖拽怎么实现

vue栅格拖拽怎么实现

实现Vue栅格拖拽的方法 使用Vue实现栅格拖拽功能可以通过第三方库或原生HTML5拖拽API完成。以下是几种常见实现方式: 使用Vue.Draggable库 Vue.Draggable是基于Sor…