当前位置:首页 > VUE

vue如何实现draggable

2026-01-19 00:03:47VUE

Vue 实现 Draggable 的方法

使用第三方库 vuedraggable

vuedraggable 是基于 Sortable.js 的 Vue 拖拽组件,适用于列表拖拽排序。

安装依赖:

npm install vuedraggable

基础用法示例:

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

<script>
import draggable from 'vuedraggable';
export default {
  components: { draggable },
  data() {
    return {
      list: [
        { id: 1, name: 'Item 1' },
        { id: 2, name: 'Item 2' }
      ]
    };
  },
  methods: {
    onDragEnd() {
      console.log('拖拽完成后的顺序:', this.list);
    }
  }
};
</script>

使用 HTML5 原生拖拽 API

通过 HTML5 的 draggable 属性和事件实现基础拖拽功能。

示例代码:

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

<script>
export default {
  data() {
    return {
      items: [
        { id: 1, text: 'A' },
        { id: 2, text: 'B' }
      ],
      draggedItem: null
    };
  },
  methods: {
    handleDragStart(e, item) {
      this.draggedItem = item;
      e.dataTransfer.effectAllowed = 'move';
    },
    handleDrop(e, targetItem) {
      if (this.draggedItem !== targetItem) {
        const draggedIndex = this.items.indexOf(this.draggedItem);
        const targetIndex = this.items.indexOf(targetItem);
        this.items.splice(draggedIndex, 1);
        this.items.splice(targetIndex, 0, this.draggedItem);
      }
    }
  }
};
</script>

使用 Sortable.js 直接操作 DOM

适用于需要更复杂控制的场景,需手动管理 Vue 数据与 DOM 的同步。

安装 Sortable.js:

npm install sortablejs

实现示例:

<template>
  <ul ref="list">
    <li v-for="item in items" :key="item.id">{{ item.name }}</li>
  </ul>
</template>

<script>
import Sortable from 'sortablejs';
export default {
  data() {
    return {
      items: [
        { id: 1, name: 'Apple' },
        { id: 2, name: 'Banana' }
      ]
    };
  },
  mounted() {
    new Sortable(this.$refs.list, {
      onEnd: (evt) => {
        const movedItem = this.items.splice(evt.oldIndex, 1)[0];
        this.items.splice(evt.newIndex, 0, movedItem);
      }
    });
  }
};
</script>

选择建议

  • 快速实现列表排序优先选择 vuedraggable
  • 需要轻量级解决方案时使用 HTML5 API
  • 需要高度定制化拖拽行为时选择 Sortable.js

vue如何实现draggable

标签: 如何实现vue
分享给朋友:

相关文章

vue实现报表

vue实现报表

vue实现报表的方法 使用Vue实现报表通常需要结合图表库或表格组件。以下是几种常见方法: 使用ECharts 安装ECharts库: npm install echarts vue-echa…

vue 实现滚动

vue 实现滚动

实现滚动的基本方法 在Vue中实现滚动效果可以通过多种方式完成,包括使用原生JavaScript、CSS或第三方库。以下是一些常见的方法: 使用window.scrollTo方法实现页面滚动 可以…

vue实现素材

vue实现素材

Vue 实现素材的方法 使用 Vue 组件管理素材 在 Vue 项目中,可以通过组件化的方式管理素材。创建一个专门的组件来加载和显示素材,例如图片、视频或音频文件。组件可以接收素材的路径或 URL 作…

vue实现模块

vue实现模块

Vue 实现模块化的方法 Vue 支持多种模块化开发方式,可以根据项目需求选择适合的方案。 使用单文件组件(SFC) 单文件组件是 Vue 最常用的模块化方式,将模板、脚本和样式封装在一个 .vue…

vue实现机制

vue实现机制

Vue 实现机制的核心原理 Vue.js 的核心实现机制主要基于响应式系统、虚拟 DOM 和组件化设计。以下是关键实现细节: 响应式系统 Vue 通过 Object.defineProperty(V…

vue 实现树状

vue 实现树状

Vue 实现树状结构的方法 递归组件实现树状结构 递归组件是 Vue 中实现树状结构的常见方法。通过组件自身调用自身,可以轻松构建多层级树状结构。 <template> <ul…