当前位置:首页 > VUE

vue.js实现拖拽

2026-02-22 12:47:31VUE

Vue.js 实现拖拽功能

Vue.js 提供了多种方式实现拖拽功能,可以通过原生 HTML5 的拖放 API 或第三方库如 vuedraggable 来实现。以下是两种常见的方法:

使用 HTML5 拖放 API

HTML5 原生拖放 API 通过 draggable 属性和事件监听实现拖拽功能。在 Vue.js 中,可以通过绑定事件和操作数据来实现。

vue.js实现拖拽

<template>
  <div>
    <div 
      v-for="item in items" 
      :key="item.id"
      draggable="true"
      @dragstart="handleDragStart($event, item)"
      @dragover.prevent
      @drop="handleDrop($event, item)"
    >
      {{ item.text }}
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: [
        { id: 1, text: 'Item 1' },
        { id: 2, text: 'Item 2' },
        { id: 3, text: 'Item 3' },
      ],
      draggedItem: null,
    };
  },
  methods: {
    handleDragStart(event, item) {
      this.draggedItem = item;
      event.dataTransfer.setData('text/plain', item.id);
    },
    handleDrop(event, targetItem) {
      if (this.draggedItem === targetItem) return;
      const draggedIndex = this.items.findIndex(item => item.id === this.draggedItem.id);
      const targetIndex = this.items.findIndex(item => item.id === targetItem.id);
      const newItems = [...this.items];
      newItems.splice(draggedIndex, 1);
      newItems.splice(targetIndex, 0, this.draggedItem);
      this.items = newItems;
    },
  },
};
</script>

使用 vuedraggable

vuedraggable 是一个基于 Sortable.js 的 Vue 拖拽组件,简化了拖拽列表的实现。

安装 vuedraggable

vue.js实现拖拽

npm install vuedraggable

示例代码:

<template>
  <div>
    <draggable v-model="items" group="items" @end="onDragEnd">
      <div v-for="item in items" :key="item.id">
        {{ item.text }}
      </div>
    </draggable>
  </div>
</template>

<script>
import draggable from 'vuedraggable';

export default {
  components: { draggable },
  data() {
    return {
      items: [
        { id: 1, text: 'Item 1' },
        { id: 2, text: 'Item 2' },
        { id: 3, text: 'Item 3' },
      ],
    };
  },
  methods: {
    onDragEnd() {
      console.log('拖拽完成', this.items);
    },
  },
};
</script>

拖拽功能优化

为了提高拖拽体验,可以添加样式和动画效果。例如,在拖拽过程中添加阴影或高亮效果。

.draggable-item {
  padding: 10px;
  margin: 5px;
  background: #f5f5f5;
  border: 1px solid #ddd;
  cursor: move;
}
.draggable-item.drag-over {
  background: #e0f7fa;
  border: 1px dashed #4fc3f7;
}

通过以上方法,可以灵活地在 Vue.js 中实现拖拽功能,满足不同场景的需求。

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

相关文章

vue实现跑车

vue实现跑车

Vue 实现跑车动画效果 使用 Vue 结合 CSS 动画可以实现跑车在屏幕上移动的效果。以下是一个完整的实现方案: 创建 Vue 组件结构 <template> <div…

vue 实现豆瓣

vue 实现豆瓣

以下是基于 Vue 实现豆瓣电影类功能的实现方案,涵盖核心模块和技术要点: 数据获取与 API 调用 使用豆瓣开放 API(需注意调用频率限制)或第三方代理接口 推荐 axios 进行异步请求,配合…

vue实现效果

vue实现效果

以下是Vue实现常见效果的几种典型方法,分为不同场景说明: 数据绑定与响应式更新 使用v-model实现表单双向绑定: <template> <input v-model="…

vue能实现

vue能实现

Vue.js 是一个流行的前端框架,能够实现多种功能。以下是 Vue 能够实现的主要功能和特性: 响应式数据绑定 Vue 的核心特性之一是响应式数据绑定。通过数据驱动视图,当数据发生变化时,视图会…

vue插件实现

vue插件实现

Vue 插件实现方法 Vue 插件是一种向 Vue 应用程序添加全局功能的机制。插件可以包含全局指令、过滤器、混入、实例方法等。 插件的基本结构 一个 Vue 插件通常是一个对象或函数,需要暴露一个…

vue轮询实现

vue轮询实现

Vue 轮询实现方法 在 Vue 中实现轮询可以通过以下几种方式: 使用 setInterval data() { return { pollInterval: null } }…