当前位置:首页 > VUE

vue拖动实现

2026-03-07 09:11:53VUE

Vue 拖动实现方法

Vue 中实现拖动功能可以通过原生 HTML5 的拖放 API 或第三方库来完成。以下是几种常见方法:

使用 HTML5 拖放 API

HTML5 提供了原生的拖放功能,可以通过 draggable 属性、dragstartdragenddragoverdrop 事件来实现。

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

<script>
export default {
  data() {
    return {
      items: [
        { id: 1, text: 'Item 1' },
        { id: 2, text: 'Item 2' }
      ],
      draggedItem: null
    }
  },
  methods: {
    handleDragStart(event, item) {
      this.draggedItem = item;
      event.dataTransfer.setData('text/plain', item.id);
    },
    handleDragEnd() {
      this.draggedItem = null;
    },
    handleDrop(event) {
      event.preventDefault();
      const itemId = event.dataTransfer.getData('text/plain');
      // 处理拖放逻辑
    }
  }
}
</script>

使用第三方库(如 Vue.Draggable)

Vue.Draggable 是一个基于 Sortable.js 的 Vue 组件,提供了更简单的 API 来实现拖放功能。

安装:

npm install vuedraggable

使用示例:

<template>
  <div>
    <draggable v-model="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' }
      ]
    }
  },
  methods: {
    onDragEnd() {
      // 拖放结束后的逻辑
    }
  }
}
</script>

使用自定义指令

可以通过 Vue 的自定义指令实现拖动功能,适合需要更灵活控制的场景。

vue拖动实现

<template>
  <div v-draggable>可拖动的元素</div>
</template>

<script>
export default {
  directives: {
    draggable: {
      inserted(el) {
        el.setAttribute('draggable', 'true');
        el.addEventListener('dragstart', (e) => {
          e.dataTransfer.setData('text/plain', el.id);
        });
      }
    }
  }
}
</script>

注意事项

  • 使用 HTML5 拖放 API 时,需要在 dragover 事件中调用 preventDefault() 以允许放置。
  • Vue.Draggable 提供了更多高级功能,如动画、拖动手柄等。
  • 移动端支持可能需要额外处理触摸事件。

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

相关文章

vue 实现复选

vue 实现复选

Vue 实现复选功能 在 Vue 中实现复选功能可以通过多种方式完成,以下是常见的几种方法: 使用 v-model 绑定数组 通过 v-model 绑定一个数组,可以自动收集用户选择的复选框值。…

vue 实现级联

vue 实现级联

Vue 实现级联选择器 级联选择器(Cascader)常用于省市区选择、分类选择等场景。Vue 中可以通过 Element UI、Ant Design Vue 等 UI 库实现,也可以手动封装。 使…

vue 实现挂载

vue 实现挂载

Vue 实现挂载的基本方法 在 Vue 中,挂载是将 Vue 实例与 DOM 元素关联的过程。通过挂载,Vue 可以管理 DOM 并实现数据绑定和响应式更新。 创建 Vue 实例并挂载 const…

vue怎么实现

vue怎么实现

Vue 实现方法 Vue 是一个流行的前端框架,用于构建用户界面。以下是几种常见的实现方法: 数据绑定 使用 v-model 指令实现双向数据绑定,适用于表单输入元素。 <input v-m…

vue实现markdown

vue实现markdown

Vue 实现 Markdown 编辑器 在 Vue 中实现 Markdown 编辑器可以通过集成第三方库或自定义解析器完成。以下是两种常见方法: 使用第三方库(如 marked 或 markdown…

vue tab实现

vue tab实现

Vue Tab 实现方法 使用动态组件实现 Tab 在 Vue 中可以通过动态组件 <component :is="currentTab"> 结合 v-for 和 v-bind 实现 Ta…