当前位置:首页 > VUE

div拖拽实现vue

2026-01-17 11:15:58VUE

实现 Vue 中的 div 拖拽功能

在 Vue 中实现 div 拖拽功能可以通过原生 HTML5 的拖拽 API 或第三方库如 vuedraggable 完成。以下是两种方法的详细实现:

使用 HTML5 拖拽 API

通过原生事件实现拖拽,适合简单场景。以下是一个基础示例:

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

<script>
export default {
  methods: {
    handleDragStart(e) {
      e.dataTransfer.setData('text/plain', e.target.id);
      e.target.style.opacity = '0.4';
    },
    handleDragEnd(e) {
      e.target.style.opacity = '1';
    },
    handleDrop(e) {
      e.preventDefault();
      const data = e.dataTransfer.getData('text/plain');
      e.target.appendChild(document.getElementById(data));
    }
  }
};
</script>

<style>
.draggable {
  width: 100px;
  height: 100px;
  background: #42b983;
  cursor: move;
}
</style>

使用 vuedraggable 库

对于复杂场景(如列表排序),推荐使用 vuedraggable。安装并引入库:

npm install vuedraggable

示例代码:

<template>
  <draggable 
    v-model="list" 
    @start="dragStart" 
    @end="dragEnd"
  >
    <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: {
    dragStart() {
      console.log('拖拽开始');
    },
    dragEnd() {
      console.log('拖拽结束');
    }
  }
};
</script>

自定义拖拽边界与限制

若需限制拖拽范围,可通过计算位置实现:

div拖拽实现vue

<template>
  <div 
    ref="draggable"
    class="draggable"
    @mousedown="startDrag"
  >
    可拖拽元素
  </div>
</template>

<script>
export default {
  methods: {
    startDrag(e) {
      const el = this.$refs.draggable;
      const startX = e.clientX - el.getBoundingClientRect().left;
      const startY = e.clientY - el.getBoundingClientRect().top;

      const move = (e) => {
        el.style.left = `${e.clientX - startX}px`;
        el.style.top = `${e.clientY - startY}px`;
      };

      const stop = () => {
        document.removeEventListener('mousemove', move);
        document.removeEventListener('mouseup', stop);
      };

      document.addEventListener('mousemove', move);
      document.addEventListener('mouseup', stop);
    }
  }
};
</script>

<style>
.draggable {
  position: absolute;
  width: 100px;
  height: 100px;
  background: #ff7e67;
  cursor: move;
}
</style>

注意事项

  • 移动端适配需使用 touchstarttouchmove 等事件。
  • 性能优化:对于频繁拖拽操作,建议使用 transform 替代 top/left
  • 跨组件拖拽可通过 Vuex 或事件总线共享状态。

标签: 拖拽div
分享给朋友:

相关文章

vue 实现拖拽甘特图

vue 实现拖拽甘特图

实现拖拽甘特图的核心思路 Vue 实现拖拽甘特图需要结合第三方库或自定义逻辑,核心功能包括任务条渲染、时间轴刻度、拖拽交互、数据绑定等。以下是具体实现方法: 使用第三方库(推荐) vue-gantt…

vue中实现拖拽

vue中实现拖拽

Vue 中实现拖拽功能的方法 在 Vue 中实现拖拽功能可以通过多种方式完成,以下是几种常见的方法: 使用 HTML5 原生拖拽 API HTML5 提供了原生的拖拽 API,可以直接在 Vue 中…

vue实现div切换

vue实现div切换

Vue 实现 div 切换的方法 使用 v-if 和 v-else 通过 Vue 的指令 v-if 和 v-else 可以动态切换 div 的显示与隐藏。这种方式会完全销毁和重建 DOM 元素。 &…

用vue实现拖拽

用vue实现拖拽

使用 Vue 实现拖拽功能 Vue 可以通过原生 HTML5 的拖拽 API 或第三方库(如 vuedraggable)实现拖拽功能。以下是两种方法的详细实现方式。 使用 HTML5 拖拽 API…

vue 实现div拖拽

vue 实现div拖拽

实现 div 拖拽的基本思路 在 Vue 中实现 div 拖拽功能,可以通过监听鼠标事件(mousedown、mousemove、mouseup)来实现。核心逻辑是记录拖拽起始位置,计算位移并更新 d…

Vue拖拽怎么实现

Vue拖拽怎么实现

Vue拖拽实现方法 使用Vue实现拖拽功能可以通过原生HTML5的拖拽API或第三方库如vuedraggable来实现。以下是两种常见的方法: 使用HTML5拖拽API HTML5提供了原生的拖拽A…