当前位置:首页 > VUE

vue实现拖拽div

2026-01-14 08:44:00VUE

实现拖拽功能的基本思路

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

使用HTML5拖拽API

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

vue实现拖拽div

<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拖拽组件,适合实现列表排序或复杂拖拽场景。

vue实现拖拽div

安装依赖:

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

相关文章

vue实现选择分类

vue实现选择分类

Vue 实现选择分类的方法 使用 v-model 绑定选择值 在 Vue 中可以通过 v-model 指令实现双向数据绑定,适用于下拉选择框(<select>)。以下是一个基本示例: &…

vue实现选择季度

vue实现选择季度

Vue 实现选择季度的几种方法 使用下拉选择框(Select) 在 Vue 中可以通过 v-model 绑定一个下拉选择框来实现季度选择。数据可以预先定义为一个包含季度选项的数组。 <tem…

vue实现裁剪头像

vue实现裁剪头像

Vue 实现头像裁剪功能 实现头像裁剪功能通常需要结合第三方库如 cropperjs 或 vue-cropper。以下是两种常见实现方式: 使用 vue-cropper 库 安装依赖: n…

用vue实现搜索查询

用vue实现搜索查询

实现搜索查询的基本思路 在Vue中实现搜索查询功能通常涉及以下几个核心部分:数据绑定、事件监听、过滤逻辑和UI反馈。以下是一个完整的实现方案。 数据绑定与输入框 创建一个Vue组件,包含一个输入框…

vue播放倍速怎么实现

vue播放倍速怎么实现

实现Vue播放倍速的方法 在Vue中实现播放倍速功能通常涉及HTML5的<video>元素或第三方播放器库。以下是几种常见实现方式: 使用原生HTML5 video元素 通过ref获取v…

vue公共列表的实现

vue公共列表的实现

实现 Vue 公共列表组件 公共列表组件通常用于展示重复结构的数据,例如商品列表、用户列表等。以下是一个典型的实现方式: 基础实现 创建可复用的列表组件 List.vue: <templ…