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

使用示例:

vue拖拽实现方式

<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

使用示例:

vue拖拽实现方式

<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 中实现拖拽功能有多种方式,可以根据需求选择合适的方法:

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

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

相关文章

vue实现拖拽div

vue实现拖拽div

Vue 实现拖拽 Div 的方法 使用原生 HTML5 拖拽 API HTML5 提供了原生的拖拽 API,结合 Vue 的事件绑定可以快速实现拖拽功能。以下是实现步骤: <template&…

vue实现拖拽到容器里

vue实现拖拽到容器里

实现拖拽到容器的基本步骤 安装并引入 Vue.Draggable 库,这是一个基于 Sortable.js 的 Vue 拖拽组件。可以通过 npm 或 yarn 进行安装。 npm install…

vue拖拽容器实现

vue拖拽容器实现

Vue 拖拽容器实现方法 在 Vue 中实现拖拽容器功能可以通过原生 HTML5 的拖放 API 或第三方库如 vuedraggable 来实现。以下是两种方法的详细说明。 使用 HTML5 拖放…

jquery拖拽

jquery拖拽

jQuery拖拽实现方法 使用jQuery实现拖拽功能可以通过多种方式完成,以下是常见的实现方法: 使用jQuery UI的Draggable组件 jQuery UI提供了现成的拖拽组件,只需引入相…

Vue实现拖拽布局

Vue实现拖拽布局

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

vue实现拖拽上传

vue实现拖拽上传

Vue 拖拽上传实现方法 使用 HTML5 原生拖拽 API 在 Vue 中可以通过监听原生拖拽事件实现基础功能: <template> <div class="dr…