当前位置:首页 > VUE

vue实现拖拽首页

2026-01-19 10:44:44VUE

Vue 实现拖拽首页功能

实现拖拽功能通常需要结合 Vue 的指令和第三方库,以下是几种常见的方法:

使用 HTML5 原生拖拽 API

HTML5 提供了原生的拖拽 API,可以通过 Vue 的指令封装实现拖拽功能。

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

<script>
export default {
  data() {
    return {
      items: [
        { id: 1, name: 'Item 1' },
        { id: 2, name: 'Item 2' },
      ],
      draggedItem: null,
    };
  },
  methods: {
    handleDragStart(event, item) {
      this.draggedItem = item;
      event.dataTransfer.setData('text/plain', item.id);
    },
    handleDrop(event, targetItem) {
      if (this.draggedItem.id !== targetItem.id) {
        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>

使用第三方库 Vue.Draggable

Vue.Draggable 是一个基于 Sortable.js 的 Vue 拖拽组件,功能强大且易于使用。

安装依赖:

npm install vuedraggable

示例代码:

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

<script>
import draggable from 'vuedraggable';

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

使用 Sortable.js 直接操作 DOM

Sortable.js 是一个轻量级的拖拽库,可以直接操作 DOM 元素。

安装依赖:

npm install sortablejs

示例代码:

vue实现拖拽首页

<template>
  <div ref="sortableContainer">
    <div v-for="item in items" :key="item.id">
      {{ item.name }}
    </div>
  </div>
</template>

<script>
import Sortable from 'sortablejs';

export default {
  data() {
    return {
      items: [
        { id: 1, name: 'Item 1' },
        { id: 2, name: 'Item 2' },
      ],
    };
  },
  mounted() {
    new Sortable(this.$refs.sortableContainer, {
      animation: 150,
      onEnd: (event) => {
        const movedItem = this.items[event.oldIndex];
        this.items.splice(event.oldIndex, 1);
        this.items.splice(event.newIndex, 0, movedItem);
      },
    });
  },
};
</script>

注意事项

  • 拖拽功能的实现需要根据实际需求选择合适的方法。
  • 原生 HTML5 拖拽 API 兼容性较好,但功能相对简单。
  • Vue.Draggable 和 Sortable.js 提供了更丰富的功能,适合复杂场景。
  • 拖拽过程中注意数据的同步更新,避免出现数据不一致的问题。

标签: 首页拖拽
分享给朋友:

相关文章

vue模仿淘宝实现首页

vue模仿淘宝实现首页

Vue 实现淘宝首页的步骤 搭建项目结构 使用 Vue CLI 创建项目,安装必要的依赖如 Vue Router、Vuex、Axios 等。项目目录结构应包含 components、views、ass…

前端实现拖拽功能vue

前端实现拖拽功能vue

使用 HTML5 拖放 API 在 Vue 中可以通过 HTML5 的原生拖放 API 实现拖拽功能。需要监听 dragstart、dragover 和 drop 事件。 <template&…

vue实现div拖拽

vue实现div拖拽

Vue 实现 Div 拖拽的方法 使用原生 HTML5 拖拽 API 在 Vue 中可以通过 HTML5 的拖拽 API 实现基础拖拽功能。需要为元素添加 draggable 属性,并监听 drags…

vue中实现拖拽

vue中实现拖拽

Vue 中实现拖拽功能的方法 在 Vue 中实现拖拽功能可以通过多种方式完成,以下是几种常见的方法: 使用 HTML5 原生拖拽 API HTML5 提供了原生的拖拽 API,可以直接在 Vue 中…

vue实现拆分拖拽

vue实现拆分拖拽

Vue 实现拆分拖拽功能 拆分拖拽通常指将一个元素拆分为多个部分,并允许用户通过拖拽重新排列或组合这些部分。以下是实现这一功能的几种方法: 使用 Vue.Draggable 库 Vue.Dragga…

vue实现拖拽滚动

vue实现拖拽滚动

Vue 实现拖拽滚动的方法 在 Vue 中实现拖拽滚动功能,可以通过监听鼠标事件并结合 CSS 或 JavaScript 控制滚动行为。以下是几种常见的实现方式: 使用原生事件监听 通过监听 mou…