当前位置:首页 > VUE

div拖拽实现vue

2026-01-17 11:15:58VUE

实现 Vue 中的 div 拖拽功能

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

使用 HTML5 拖拽 API

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

div拖拽实现vue

<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。安装并引入库:

div拖拽实现vue

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>

自定义拖拽边界与限制

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

<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 实现拖拽改变尺寸的方法 使用原生 HTML5 拖拽 API 通过监听 mousedown、mousemove 和 mouseup 事件实现拖拽改变尺寸。创建一个可拖拽的边界元素,调整目标元素的…

jquery拖拽

jquery拖拽

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

vue 实现可拖拽

vue 实现可拖拽

实现拖拽功能的基本思路 在Vue中实现拖拽功能可以通过HTML5的Drag and Drop API或第三方库如vuedraggable来完成。以下是两种常见方法的详细说明。 使用HTML5原生拖拽…

vue 拖拽排序 实现

vue 拖拽排序 实现

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

前端vue实现拖拽

前端vue实现拖拽

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

js实现隐藏div

js实现隐藏div

隐藏div的几种方法 使用JavaScript隐藏div元素可以通过多种方式实现,以下是几种常见的方法: 方法一:修改style.display属性 将div的display属性设置为"non…