当前位置:首页 > VUE

vue怎么实现上下拖动

2026-02-24 02:45:05VUE

实现上下拖动的功能

在Vue中实现上下拖动功能通常需要结合HTML5的拖放API或第三方库如vuedraggable。以下是两种常见方法的详细说明。

使用HTML5拖放API

HTML5提供了原生拖放API,可以通过draggable属性、dragstartdragoverdrop事件实现拖动排序。

<template>
  <div>
    <div
      v-for="(item, index) in items"
      :key="item.id"
      draggable="true"
      @dragstart="handleDragStart(index)"
      @dragover.prevent="handleDragOver(index)"
      @drop="handleDrop(index)"
      class="draggable-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' },
      ],
      draggedIndex: null,
    };
  },
  methods: {
    handleDragStart(index) {
      this.draggedIndex = index;
    },
    handleDragOver(index) {
      if (this.draggedIndex !== index) {
        const draggedItem = this.items[this.draggedIndex];
        const newItems = [...this.items];
        newItems.splice(this.draggedIndex, 1);
        newItems.splice(index, 0, draggedItem);
        this.items = newItems;
        this.draggedIndex = index;
      }
    },
    handleDrop() {
      this.draggedIndex = null;
    },
  },
};
</script>

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

使用vuedraggable库

vuedraggable是一个基于Sortable.js的Vue组件,简化了拖放功能的实现。

安装依赖:

npm install vuedraggable

示例代码:

vue怎么实现上下拖动

<template>
  <div>
    <draggable
      v-model="items"
      group="items"
      @start="dragStart"
      @end="dragEnd"
    >
      <div v-for="item in items" :key="item.id" class="draggable-item">
        {{ 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: {
    dragStart() {
      console.log('Drag started');
    },
    dragEnd() {
      console.log('Drag ended');
    },
  },
};
</script>

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

注意事项

  • 使用HTML5拖放API时,需要手动处理数据的更新和DOM的重新渲染。
  • vuedraggable提供了更简洁的API和更丰富的功能,如跨列表拖放、动画效果等。
  • 在移动端,可能需要额外的触摸事件处理或使用支持触摸的库如Sortable.js

标签: 拖动上下
分享给朋友:

相关文章

vue实现拖动栏

vue实现拖动栏

Vue 实现拖动栏 使用 HTML5 拖放 API HTML5 提供了原生的拖放 API,可以直接在 Vue 中使用。通过 draggable 属性标记可拖动元素,并监听 dragstart、drag…

vue实现可拖动

vue实现可拖动

Vue 实现可拖动功能 在 Vue 中实现可拖动功能通常可以通过原生 HTML5 的拖放 API 或第三方库如 vuedraggable 来完成。以下是两种方法的详细说明: 使用 HTML5 拖放…

vue实现拖动文件移动

vue实现拖动文件移动

Vue 实现文件拖动移动 实现文件拖动移动功能通常涉及 HTML5 的拖放 API 和 Vue 的事件处理。以下是具体实现方法: 基础拖放实现 在 Vue 组件中设置拖放区域并处理相关事件: &l…

vue实现边框高度拖动

vue实现边框高度拖动

实现边框高度拖动的核心思路 通过监听鼠标事件(mousedown、mousemove、mouseup)来实现拖动效果。在Vue中结合自定义指令或组件封装更为优雅。 基础实现方案(基于自定义指令) &…

react实现拖动排序

react实现拖动排序

实现拖动排序的基本思路 在React中实现拖动排序通常借助第三方库如react-beautiful-dnd或react-dnd。这两种库提供了完整的拖放API,适合列表、看板等场景的排序需求。 使用…

react实现鼠标拖动

react实现鼠标拖动

实现鼠标拖动的基本步骤 在React中实现鼠标拖动功能需要监听鼠标事件并更新元素的位置。以下是核心实现方法: 安装必要依赖(如需要): npm install react-draggable 使用…