当前位置:首页 > 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

实现示例:

vue如何实现draggable

<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
分享给朋友:

相关文章

vue实现适老化样式

vue实现适老化样式

Vue 实现适老化样式的关键方法 全局字体与字号调整 通过 CSS 变量或主题配置统一放大基础字号,建议正文不小于 18px,标题更大。在 App.vue 中设置全局样式: :root { --…

vue如何实现默认页面

vue如何实现默认页面

实现 Vue 默认页面的方法 在 Vue 中实现默认页面通常涉及路由配置。以下是几种常见的方法: 使用路由重定向 在 Vue Router 配置中,可以通过 redirect 属性设置默认路由:…

vue实现倒计时抢券

vue实现倒计时抢券

Vue 实现倒计时抢券功能 核心逻辑 倒计时抢券功能需要结合时间计算、状态管理和界面交互。通过 Vue 的响应式特性和生命周期钩子,可以高效实现这一需求。 实现步骤 1. 数据准备 在 Vue 组件…

vue实现生成二维码

vue实现生成二维码

使用qrcode.vue库生成二维码 安装qrcode.vue库: npm install qrcode.vue --save 在Vue组件中使用: <template> <…

vue实现订单

vue实现订单

Vue 实现订单功能 订单数据结构设计 订单数据通常包含以下字段: order: { id: String, // 订单ID userId: String,…

vue实现树

vue实现树

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