当前位置:首页 > VUE

vue 实现div拖拽

2026-01-17 18:58:09VUE

实现 div 拖拽的基本思路

在 Vue 中实现 div 拖拽功能,可以通过监听鼠标事件(mousedownmousemovemouseup)来实现。核心逻辑是记录拖拽起始位置,计算位移并更新 div 的位置。

使用原生事件实现拖拽

  1. 模板部分
    在模板中绑定事件,并通过 style 动态设置 div 的位置:

    <template>
      <div
        class="draggable"
        @mousedown="startDrag"
        @mousemove="onDrag"
        @mouseup="stopDrag"
        @mouseleave="stopDrag"
        :style="{ left: position.x + 'px', top: position.y + 'px' }"
      >
        可拖拽的 div
      </div>
    </template>
  2. 脚本部分
    定义拖拽逻辑,记录初始位置和偏移量:

    vue 实现div拖拽

    <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,
          };
        },
        onDrag(e) {
          if (!this.isDragging) return;
          this.position = {
            x: e.clientX - this.startPos.x,
            y: e.clientY - this.startPos.y,
          };
        },
        stopDrag() {
          this.isDragging = false;
        },
      },
    };
    </script>
  3. 样式部分
    确保 div 可以自由移动:

    <style>
    .draggable {
      position: absolute;
      cursor: grab;
      user-select: none;
    }
    </style>

使用第三方库(如 vuedraggable)

如果需要更复杂的拖拽功能(如列表排序),可以使用 vuedraggable 库:

vue 实现div拖拽

  1. 安装库

    npm install vuedraggable
  2. 实现列表拖拽

    <template>
      <draggable v-model="list" @start="onStart" @end="onEnd">
        <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: {
        onStart() {
          console.log("拖拽开始");
        },
        onEnd() {
          console.log("拖拽结束");
        },
      },
    };
    </script>

注意事项

  • 拖拽性能优化:避免频繁触发 mousemove 事件,可以使用防抖(debounce)或节流(throttle)。
  • 边界检查:防止 div 拖拽超出可视区域。
  • 移动端适配:如果需要支持触摸屏,需监听 touchstarttouchmovetouchend 事件。

通过以上方法,可以灵活实现 Vue 中的 div 拖拽功能。

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

相关文章

eventbus vue实现

eventbus vue实现

EventBus 实现原理 EventBus 是一种发布/订阅模式,用于 Vue 组件间的通信。核心是通过一个中央事件总线管理事件监听和触发。 创建 EventBus 在 Vue 项目中创建一个独立…

vue实现list

vue实现list

Vue 实现列表渲染 在 Vue 中,可以使用 v-for 指令来渲染列表。v-for 指令基于一个数组或对象来渲染一个列表,可以遍历数组或对象的属性。 基本列表渲染 <template>…

vue登录实现

vue登录实现

Vue 登录实现 实现登录功能通常需要前端与后端配合,Vue 作为前端框架,主要负责表单处理、请求发送和状态管理。以下是常见的实现方式: 表单设计与数据绑定 使用 Vue 的 v-model 实现表…

vue实现拖拉

vue实现拖拉

实现拖拽功能的基本步骤 在Vue中实现拖拽功能可以通过原生HTML5的拖放API或第三方库如vuedraggable完成。以下是两种方法的详细说明。 使用HTML5原生拖放API HTML5提供了原…

vue实现单词逆转

vue实现单词逆转

实现单词逆转的方法 在Vue中实现单词逆转可以通过多种方式完成,以下是几种常见的方法: 使用计算属性逆转单词 计算属性是Vue中处理数据逻辑的理想选择。可以通过计算属性来实现单词逆转: &…

vue实现产品搜索

vue实现产品搜索

实现产品搜索功能 在Vue中实现产品搜索功能需要结合前端界面和后端数据处理。以下是实现的基本思路和代码示例: 数据准备 创建一个产品数据数组,包含需要搜索的产品信息: data() { ret…