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

示例代码:

vue实现拖拽div

<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
分享给朋友:

相关文章

vue实现granfana

vue实现granfana

Vue 实现类似 Grafana 的仪表盘 要在 Vue 中实现类似 Grafana 的仪表盘功能,需要结合数据可视化库、状态管理和 UI 组件。以下是关键步骤和推荐工具: 数据可视化库 使用 E…

vue实现oauth

vue实现oauth

Vue 实现 OAuth 的步骤 安装必要的依赖 确保项目中安装了 axios 和 vue-router。OAuth 通常需要发送 HTTP 请求和处理路由跳转。 npm install axios…

vue实现长按

vue实现长按

Vue 实现长按功能的方法 在 Vue 中实现长按功能可以通过原生事件监听或自定义指令完成。以下是几种常见实现方式: 使用原生事件监听 通过 @mousedown 和 @mouseup 或 @tou…

vue实现抽奖

vue实现抽奖

Vue 实现抽奖功能 基本抽奖逻辑 创建一个Vue组件,包含奖品列表、抽奖按钮和结果显示区域。使用随机数生成器选择奖品。 <template> <div> <…

vue多选实现

vue多选实现

Vue 多选实现方法 基础实现(v-model + multiple) 在 Vue 中实现多选可以通过 <select> 元素的 multiple 属性结合 v-model 完成。v-mo…

vue实现秒表

vue实现秒表

实现秒表功能 在Vue中实现秒表功能需要处理时间显示、开始、暂停和重置逻辑。以下是具体实现方式: 基础实现代码 <template> <div> <div&…