当前位置:首页 > 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 中实现列表通常使用 v-for 指令,结合数组或对象数据渲染动态列表。以下是几种常见的实现方式: 基础列表渲染 使用 v-for 指令遍历数组,渲染列表项。ite…

vue实现oauth

vue实现oauth

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

vue实现水印

vue实现水印

Vue 实现水印的方法 使用 CSS 背景图 通过 CSS 的 background-image 和 background-repeat 属性实现水印效果。创建一个包含水印文本的 Canvas,将其转…

vue实现座位

vue实现座位

Vue实现座位布局 使用Vue实现座位布局可以通过组件化和响应式数据管理来简化开发流程。以下是一个完整的实现方案: 数据准备 定义座位数据结构,通常使用二维数组表示行列关系: data() {…

vue实现监控

vue实现监控

Vue 实现监控功能的方法 在 Vue 中实现监控功能通常涉及数据变化监听、事件监听或第三方监控工具集成。以下是几种常见实现方式: 使用 Vue 的 watch 监听数据变化 通过 watch 可以…

vue实现侧导航

vue实现侧导航

Vue 实现侧边导航 使用 Vue 实现侧边导航可以通过多种方式完成,以下是一种常见的实现方法,结合 Vue Router 和动态组件。 基础结构 创建侧边导航栏的基本结构,通常使用 <ul&…