当前位置:首页 > VUE

vue拖拽实现方式

2026-03-07 21:38:36VUE

Vue 拖拽实现方式

Vue 中实现拖拽功能可以通过原生 HTML5 的拖拽 API 或第三方库来实现。以下是几种常见的实现方式:

使用 HTML5 原生拖拽 API

HTML5 提供了原生的拖拽 API,可以通过 draggable 属性、dragstartdragenddragoverdrop 等事件来实现拖拽功能。

<template>
  <div>
    <div 
      draggable="true" 
      @dragstart="handleDragStart"
      @dragend="handleDragEnd"
    >
      拖拽元素
    </div>
    <div 
      @dragover.prevent
      @drop="handleDrop"
    >
      放置区域
    </div>
  </div>
</template>

<script>
export default {
  methods: {
    handleDragStart(event) {
      event.dataTransfer.setData('text/plain', '拖拽数据');
    },
    handleDragEnd(event) {
      console.log('拖拽结束');
    },
    handleDrop(event) {
      event.preventDefault();
      const data = event.dataTransfer.getData('text/plain');
      console.log('放置数据:', data);
    }
  }
};
</script>

使用第三方库 Vue.Draggable

Vue.Draggable 是一个基于 Sortable.js 的 Vue 组件,提供了更高级的拖拽功能,特别适合列表排序和嵌套拖拽。

安装 Vue.Draggable:

npm install vuedraggable

使用示例:

<template>
  <div>
    <draggable v-model="list" @end="onDragEnd">
      <div v-for="(item, index) in list" :key="index">
        {{ item }}
      </div>
    </draggable>
  </div>
</template>

<script>
import draggable from 'vuedraggable';

export default {
  components: { draggable },
  data() {
    return {
      list: ['Item 1', 'Item 2', 'Item 3']
    };
  },
  methods: {
    onDragEnd() {
      console.log('拖拽结束,当前列表:', this.list);
    }
  }
};
</script>

使用第三方库 interact.js

interact.js 是一个轻量级的拖拽库,支持更复杂的拖拽交互,如限制拖拽范围、吸附网格等。

安装 interact.js:

npm install interactjs

使用示例:

<template>
  <div>
    <div ref="dragElement" class="drag-element">拖拽元素</div>
  </div>
</template>

<script>
import interact from 'interactjs';

export default {
  mounted() {
    interact(this.$refs.dragElement)
      .draggable({
        onmove: (event) => {
          const target = event.target;
          const x = (parseFloat(target.getAttribute('data-x')) || 0) + event.dx;
          const y = (parseFloat(target.getAttribute('data-y')) || 0) + event.dy;
          target.style.transform = `translate(${x}px, ${y}px)`;
          target.setAttribute('data-x', x);
          target.setAttribute('data-y', y);
        }
      });
  }
};
</script>

<style>
.drag-element {
  width: 100px;
  height: 100px;
  background: #ccc;
  cursor: move;
}
</style>

使用第三方库 Sortable.js

Sortable.js 是一个纯 JavaScript 库,可以在 Vue 中直接使用,适合列表拖拽排序。

安装 Sortable.js:

npm install sortablejs

使用示例:

<template>
  <div ref="sortableList">
    <div v-for="(item, index) in list" :key="index">
      {{ item }}
    </div>
  </div>
</template>

<script>
import Sortable from 'sortablejs';

export default {
  data() {
    return {
      list: ['Item 1', 'Item 2', 'Item 3']
    };
  },
  mounted() {
    new Sortable(this.$refs.sortableList, {
      onEnd: (event) => {
        const movedItem = this.list.splice(event.oldIndex, 1)[0];
        this.list.splice(event.newIndex, 0, movedItem);
      }
    });
  }
};
</script>

总结

Vue 中实现拖拽功能有多种方式,可以根据需求选择合适的方法:

vue拖拽实现方式

  • 使用 HTML5 原生拖拽 API 适合简单的拖拽需求。
  • 使用 Vue.Draggable 适合列表排序和嵌套拖拽。
  • 使用 interact.js 适合复杂的拖拽交互。
  • 使用 Sortable.js 适合纯 JavaScript 的列表拖拽排序。

标签: 拖拽方式
分享给朋友:

相关文章

vue拖拽实现方式

vue拖拽实现方式

Vue 拖拽实现方式 使用 HTML5 原生拖拽 API HTML5 提供了原生的拖拽 API,可以通过 draggable 属性和相关事件(如 dragstart、dragend、dragover、…

vue 拖拽排序 实现

vue 拖拽排序 实现

实现拖拽排序的基本思路 在Vue中实现拖拽排序通常需要借助HTML5的拖放API或第三方库如sortablejs、vuedraggable等。以下是两种常见实现方式: 使用HTML5原生拖放API…

前端vue实现拖拽

前端vue实现拖拽

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

vue实现卡片拖拽

vue实现卡片拖拽

Vue 实现卡片拖拽的方法 使用 HTML5 拖放 API HTML5 提供了原生拖放 API,结合 Vue 可以轻松实现拖拽功能。以下是一个基本实现示例: <template> &…

vue实现鼠标拖拽

vue实现鼠标拖拽

实现鼠标拖拽功能 在Vue中实现鼠标拖拽功能可以通过以下步骤完成。这里提供一个基础实现方案,适用于大多数拖拽场景。 监听鼠标事件 为需要拖拽的元素绑定mousedown、mousemove和mous…

vue实现拖拽互换

vue实现拖拽互换

Vue 实现拖拽互换 在 Vue 中实现拖拽互换功能可以通过原生 HTML5 的拖放 API 或第三方库如 vuedraggable 来完成。以下是两种方法的实现方式: 使用 HTML5 拖放 AP…