当前位置:首页 > VUE

vue使用插件实现拖拽

2026-02-22 17:32:33VUE

Vue 拖拽插件实现方法

使用 vue-draggable-next

安装依赖:

npm install vuedraggable@next

基本用法示例:

<template>
  <draggable 
    v-model="list" 
    item-key="id"
    @end="onDragEnd">
    <template #item="{element}">
      <div>{{ element.name }}</div>
    </template>
  </draggable>
</template>

<script>
import { defineComponent } from 'vue'
import draggable from 'vuedraggable'

export default defineComponent({
  components: { draggable },
  data() {
    return {
      list: [
        { id: 1, name: 'Item 1' },
        { id: 2, name: 'Item 2' }
      ]
    }
  },
  methods: {
    onDragEnd() {
      console.log('拖拽完成')
    }
  }
})
</script>

使用 Sortable.js 直接集成

安装核心库:

npm install sortablejs

组件封装示例:

vue使用插件实现拖拽

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

<script>
import { onMounted, ref } from 'vue'
import Sortable from 'sortablejs'

export default {
  setup() {
    const container = ref(null)
    const items = ref([
      { id: 1, text: 'Item 1' },
      { id: 2, text: 'Item 2' }
    ])

    onMounted(() => {
      new Sortable(container.value, {
        animation: 150,
        onEnd: (evt) => {
          const movedItem = items.value.splice(evt.oldIndex, 1)[0]
          items.value.splice(evt.newIndex, 0, movedItem)
        }
      })
    })

    return { container, items }
  }
}
</script>

使用 Vue.Draggable 高级功能

跨列表拖拽实现:

<template>
  <div class="container">
    <draggable 
      v-model="listA"
      group="shared"
      item-key="id">
      <template #item="{element}">
        <div class="item">{{ element.name }}</div>
      </template>
    </draggable>

    <draggable 
      v-model="listB"
      group="shared"
      item-key="id">
      <template #item="{element}">
        <div class="item">{{ element.name }}</div>
      </template>
    </draggable>
  </div>
</template>

自定义拖拽手柄

添加 handle 属性实现指定区域拖拽:

vue使用插件实现拖拽

<template>
  <draggable v-model="items" handle=".handle">
    <template #item="{element}">
      <div>
        <span class="handle">≡</span>
        {{ element.name }}
      </div>
    </template>
  </draggable>
</template>

表格行拖拽实现

表格行拖拽示例:

<template>
  <draggable 
    v-model="tableData"
    tag="tbody"
    item-key="id">
    <template #item="{element}">
      <tr>
        <td>{{ element.id }}</td>
        <td>{{ element.name }}</td>
      </tr>
    </template>
  </draggable>
</template>

拖拽状态样式控制

添加拖拽过程样式:

<template>
  <draggable 
    v-model="items" 
    :class="{'dragging': drag}"
    @start="drag = true"
    @end="drag = false">
    <!-- 内容 -->
  </draggable>
</template>

<style>
.dragging {
  background-color: #f0f0f0;
}
</style>

拖拽边界限制

限制只能在特定容器内拖拽:

<template>
  <div class="drop-zone">
    <draggable 
      v-model="items"
      :group="{ name: 'items', pull: 'clone', put: false }">
      <!-- 内容 -->
    </draggable>
  </div>
</template>

标签: 插件拖拽
分享给朋友:

相关文章

vue拖拽实现

vue拖拽实现

vue拖拽实现方法 使用HTML5原生拖拽API HTML5提供原生拖拽API,通过draggable属性、dragstart、dragend等事件实现基础拖拽功能。 <template>…

vue实现列拖拽

vue实现列拖拽

Vue 实现列拖拽功能 使用原生 HTML5 拖放 API 在 Vue 中可以通过原生 HTML5 的拖放 API 实现列拖拽功能。需要处理 draggable、dragstart、dragover…

vue实现简单拖拽

vue实现简单拖拽

Vue 实现简单拖拽功能 在 Vue 中实现拖拽功能可以通过 HTML5 的拖放 API 或第三方库(如 vuedraggable)来完成。以下是两种常见的实现方式: 使用 HTML5 拖放 API…

vue实现页面拖拽

vue实现页面拖拽

Vue 实现页面拖拽的方法 使用原生 HTML5 拖拽 API HTML5 提供了原生的拖拽 API,可以通过 draggable 属性和相关事件实现拖拽功能。在 Vue 中可以直接使用这些 API。…

vue如何实现插件

vue如何实现插件

Vue 插件实现方法 Vue 插件是一种可复用的功能模块,可以通过全局或局部方式注入到 Vue 应用中。以下是实现 Vue 插件的详细方法。 插件基本结构 Vue 插件通常是一个对象或函数,必须包含…

vue实现区域自由拖拽

vue实现区域自由拖拽

实现区域自由拖拽的方法 在Vue中实现区域自由拖拽,可以通过原生HTML5的拖拽API或第三方库(如vuedraggable)来实现。以下是两种常用方法的详细说明: 使用HTML5原生拖拽API H…