当前位置:首页 > VUE

vue 实现拖动效果

2026-01-18 02:33:00VUE

使用 Vue 实现拖动效果

Vue 提供了多种方式实现拖动效果,可以通过原生 HTML5 的拖放 API,也可以使用第三方库如 vuedraggable。以下是两种常见的方法:

使用 HTML5 拖放 API

HTML5 的拖放 API 可以直接在 Vue 中使用,通过监听 dragstartdragenddragoverdrop 事件来实现拖动效果。

vue 实现拖动效果

<template>
  <div>
    <div 
      v-for="(item, index) in items" 
      :key="index"
      draggable="true"
      @dragstart="handleDragStart(index)"
      @dragend="handleDragEnd"
      @dragover.prevent
      @drop="handleDrop(index)"
      class="draggable-item"
    >
      {{ item }}
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: ['Item 1', 'Item 2', 'Item 3', 'Item 4'],
      draggedIndex: null
    };
  },
  methods: {
    handleDragStart(index) {
      this.draggedIndex = index;
    },
    handleDragEnd() {
      this.draggedIndex = null;
    },
    handleDrop(index) {
      if (this.draggedIndex !== null) {
        const item = this.items.splice(this.draggedIndex, 1)[0];
        this.items.splice(index, 0, item);
      }
    }
  }
};
</script>

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

使用 vuedraggable

vuedraggable 是一个基于 Sortable.js 的 Vue 拖拽组件,使用起来更加简单和高效。

vue 实现拖动效果

安装 vuedraggable

npm install vuedraggable

在 Vue 中使用:

<template>
  <div>
    <draggable 
      v-model="items" 
      @end="onDragEnd"
      class="drag-area"
    >
      <div v-for="(item, index) in items" :key="index" class="draggable-item">
        {{ item }}
      </div>
    </draggable>
  </div>
</template>

<script>
import draggable from 'vuedraggable';

export default {
  components: {
    draggable
  },
  data() {
    return {
      items: ['Item 1', 'Item 2', 'Item 3', 'Item 4']
    };
  },
  methods: {
    onDragEnd() {
      console.log('Drag ended', this.items);
    }
  }
};
</script>

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

注意事项

  • 使用 HTML5 拖放 API 时,需要手动处理拖拽逻辑,适用于简单场景。
  • vuedraggable 提供了更丰富的功能,如动画、拖拽手柄、跨列表拖拽等,适合复杂需求。
  • 拖拽操作可能会影响数据状态,确保在拖拽结束后更新数据或触发相应的事件。

标签: 拖动效果
分享给朋友:

相关文章

vue实现拖动

vue实现拖动

Vue实现拖动的常用方法 在Vue中实现拖动功能通常需要结合HTML5的拖放API或第三方库。以下是几种常见实现方式: 使用HTML5原生拖放API HTML5提供了原生拖放API,可以通过drag…

vue实现翻书效果

vue实现翻书效果

Vue实现翻书效果的方法 翻书效果可以通过CSS动画和Vue的动态绑定实现,以下是几种常见的实现方式: 使用CSS transform和transition 通过CSS的transform属性实现翻…

vue实现效果更新

vue实现效果更新

Vue 实现效果更新的方法 Vue 提供了多种方式实现动态效果更新,主要依赖其响应式系统和生命周期钩子。以下是几种常见的方法: 数据绑定与响应式更新 Vue 的核心是数据驱动视图。通过修改数据,视图…

vue实现向上拖动

vue实现向上拖动

Vue 实现向上拖动功能 实现向上拖动功能通常需要结合 Vue 的指令和事件处理,以及原生 JavaScript 的拖拽 API。以下是几种常见的方法: 使用 HTML5 拖放 API 通过 HTM…

vue实现弹幕效果

vue实现弹幕效果

实现弹幕效果的基本思路 在Vue中实现弹幕效果,通常需要结合CSS动画和动态数据渲染。弹幕的核心是让文字从右向左平滑移动,同时支持多行显示和碰撞检测。 使用CSS动画实现移动效果 通过CSS的@ke…

vue实现拖动div

vue实现拖动div

实现拖动 div 的基本思路 在 Vue 中实现拖动 div 的功能,可以通过监听鼠标事件(mousedown、mousemove、mouseup)来动态更新元素的位置。核心逻辑是记录初始点击位置,计…