当前位置:首页 > VUE

vue实现拖拽div

2026-01-14 08:44:00VUE

实现拖拽功能的基本思路

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

使用HTML5拖拽API

HTML5提供了原生的拖拽API,通过监听dragstartdragenddragoverdrop等事件实现拖拽功能。

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

<script>
export default {
  methods: {
    handleDragStart(event) {
      event.dataTransfer.setData('text/plain', event.target.id);
    },
    handleDragEnd(event) {
      console.log('拖拽结束');
    },
    handleDrop(event) {
      const id = event.dataTransfer.getData('text/plain');
      const draggableElement = document.getElementById(id);
      event.target.appendChild(draggableElement);
    }
  }
};
</script>

<style>
.draggable {
  width: 100px;
  height: 100px;
  background: #42b983;
  cursor: move;
}
.dropzone {
  width: 200px;
  height: 200px;
  background: #eee;
  margin-top: 10px;
}
</style>

使用vuedraggable库

vuedraggable是一个基于Sortable.js的Vue拖拽组件,适合实现列表排序或复杂拖拽场景。

安装依赖:

npm install vuedraggable

示例代码:

<template>
  <draggable
    v-model="list"
    @end="onDragEnd"
  >
    <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: {
    onDragEnd() {
      console.log('拖拽完成后的列表:', this.list);
    }
  }
};
</script>

注意事项

  • 使用HTML5 API时需注意浏览器兼容性,部分旧版本浏览器可能不支持。
  • vuedraggable适合列表类拖拽,若需自由拖拽(如任意位置移动),需结合CSS定位实现。
  • 移动端需额外处理触摸事件,因HTML5拖拽API在移动端支持有限。

两种方法各有优劣,可根据具体需求选择。简单场景用原生API足够,复杂交互推荐使用vuedraggable

vue实现拖拽div

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

相关文章

vue实现录播播放

vue实现录播播放

Vue 实现录播播放 使用 video.js 实现 安装 video.js 和相关的 Vue 适配器: npm install video.js @videojs-player/vue 在 Vue…

vue弹幕实现不重叠

vue弹幕实现不重叠

实现 Vue 弹幕不重叠的方法 CSS 定位与动画控制 通过绝对定位和动态计算弹幕轨道高度,确保弹幕在不同轨道上运行。每条弹幕占据固定高度的轨道,避免重叠。 // 弹幕轨道高度计算 const t…

vue使用vr实现标注

vue使用vr实现标注

Vue 中使用 VR 实现标注的方法 在 Vue 项目中结合 VR 技术实现标注功能,可以通过 WebXR 和 Three.js 等库实现。以下为具体实现方法: 安装依赖 确保项目中已安装 Thre…

vue实现旋转

vue实现旋转

Vue 实现旋转效果的方法 在 Vue 中实现旋转效果可以通过多种方式完成,以下是几种常见的方法: 使用 CSS 动画 通过 Vue 的 :class 或 :style 绑定 CSS 动画实现旋转效…

vue 实现菜单

vue 实现菜单

Vue 实现菜单的方法 使用 Vue 实现菜单可以通过多种方式,以下是几种常见的方法: 使用 Vue Router 实现动态路由菜单 通过 Vue Router 可以动态生成菜单,根据路由配置自动…

vue实现素材

vue实现素材

Vue 实现素材的方法 使用 Vue 组件管理素材 在 Vue 项目中,可以通过组件化的方式管理素材。创建一个专门的组件来加载和显示素材,例如图片、视频或音频文件。组件可以接收素材的路径或 URL 作…