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

使用 HTML5 拖放 API 在 Vue 中可以通过 HTML5 的原生拖放 API 实现拖拽功能。需要监听 dragstart、dragover 和 drop 事件。 <template&…

vue内实现拖拽

vue内实现拖拽

Vue 实现拖拽功能的方法 使用 HTML5 原生拖拽 API HTML5 提供了原生的拖拽 API,可以通过 draggable 属性和相关事件实现拖拽功能。 <template>…

vue拖拽实现方式

vue拖拽实现方式

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

div css制作步骤

div css制作步骤

创建HTML结构 使用<div>标签划分页面区块,每个<div>需通过id或class属性标识。例如构建基础布局框架: <div id="header">页眉内容…

vue实现div变换

vue实现div变换

Vue 实现 Div 变换的方法 在 Vue 中实现 Div 变换可以通过多种方式,包括动态样式绑定、过渡动画、条件渲染等。以下是几种常见的实现方法: 动态样式绑定 通过 Vue 的 v-bind:…

Vue实现拖拽布局

Vue实现拖拽布局

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