当前位置:首页 > VUE

vue实现拖拽div

2026-03-08 01:22:08VUE

Vue 实现拖拽 Div 的方法

使用 Vue 实现拖拽功能可以通过原生 HTML5 的拖放 API 或借助第三方库(如 vuedraggable)来实现。以下是两种常见的方法:

方法一:使用 HTML5 拖放 API

通过监听 mousedownmousemovemouseup 事件,计算元素的位置变化来实现拖拽。

vue实现拖拽div

<template>
  <div 
    ref="draggableDiv" 
    @mousedown="startDrag" 
    @mousemove="drag" 
    @mouseup="stopDrag" 
    :style="{ left: position.x + 'px', top: position.y + 'px' }"
    class="draggable-div"
  >
    拖拽我
  </div>
</template>

<script>
export default {
  data() {
    return {
      position: { x: 0, y: 0 },
      isDragging: false,
      startPos: { x: 0, y: 0 }
    };
  },
  methods: {
    startDrag(e) {
      this.isDragging = true;
      this.startPos = {
        x: e.clientX - this.position.x,
        y: e.clientY - this.position.y
      };
    },
    drag(e) {
      if (!this.isDragging) return;
      this.position = {
        x: e.clientX - this.startPos.x,
        y: e.clientY - this.startPos.y
      };
    },
    stopDrag() {
      this.isDragging = false;
    }
  }
};
</script>

<style>
.draggable-div {
  position: absolute;
  width: 100px;
  height: 100px;
  background-color: #42b983;
  cursor: move;
  user-select: none;
}
</style>

方法二:使用 vuedraggable

vuedraggable 是一个基于 Sortable.js 的 Vue 拖拽组件库,适用于列表或元素的拖拽排序和位置调整。

vue实现拖拽div

安装依赖:

npm install vuedraggable

示例代码:

<template>
  <div>
    <draggable v-model="list" @start="onStart" @end="onEnd">
      <div v-for="item in list" :key="item.id" class="draggable-item">
        {{ item.name }}
      </div>
    </draggable>
  </div>
</template>

<script>
import draggable from 'vuedraggable';

export default {
  components: { draggable },
  data() {
    return {
      list: [
        { id: 1, name: 'Item 1' },
        { id: 2, name: 'Item 2' },
        { id: 3, name: 'Item 3' }
      ]
    };
  },
  methods: {
    onStart() {
      console.log('拖拽开始');
    },
    onEnd() {
      console.log('拖拽结束');
    }
  }
};
</script>

<style>
.draggable-item {
  padding: 10px;
  margin: 5px;
  background-color: #f0f0f0;
  cursor: move;
}
</style>

注意事项

  • 使用原生拖拽时,需注意事件冒泡和默认行为的阻止。
  • vuedraggable 更适合列表或复杂拖拽场景,而原生实现适合简单元素的自由拖拽。
  • 拖拽过程中可能需要处理边界限制或碰撞检测,需额外计算逻辑。

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

相关文章

vue实现功能

vue实现功能

Vue 功能实现方法 Vue.js 是一个渐进式 JavaScript 框架,用于构建用户界面。以下是实现常见功能的几种方法: 数据绑定与响应式更新 在 Vue 中,数据绑定通过 v-model…

vue评分实现

vue评分实现

Vue 评分组件实现方法 使用第三方库(如 Element UI) 安装 Element UI: npm install element-ui 引入并注册组件: import Vue from '…

vue实现input

vue实现input

Vue 实现 Input 输入框的方法 基本双向绑定 使用 v-model 指令实现双向数据绑定,适用于大多数表单场景: <template> <input v-model="…

vue实现定位

vue实现定位

Vue 中实现定位的方法 在 Vue 中实现定位可以通过以下几种方式: 使用 CSS 定位 通过 CSS 的 position 属性实现定位,Vue 中可以直接在组件的 <style>…

vue el 实现

vue el 实现

Vue 中使用 Element UI (el) 的实现方法 Element UI 是一个基于 Vue 的组件库,提供丰富的 UI 组件,常用于快速构建企业级中后台产品。以下介绍 Vue 项目中集成和使…

vue 实现href

vue 实现href

Vue 实现 href 的方法 在 Vue 中实现 href 功能可以通过多种方式,具体取决于需求场景。以下是几种常见的方法: 使用 <a> 标签 直接使用 HTML 的 <a&g…