当前位置:首页 > VUE

vue实现拖拽添加

2026-03-29 09:25:20VUE

Vue 实现拖拽添加功能

使用 HTML5 原生拖拽 API

HTML5 提供了原生的拖拽 API,结合 Vue 的事件绑定可以轻松实现拖拽添加功能。需要监听 dragstartdragoverdrop 事件。

<template>
  <div>
    <div 
      class="draggable-item" 
      draggable="true" 
      @dragstart="handleDragStart"
    >
      拖拽元素
    </div>
    <div 
      class="drop-zone" 
      @dragover.prevent 
      @drop="handleDrop"
    >
      放置区域
    </div>
  </div>
</template>

<script>
export default {
  methods: {
    handleDragStart(e) {
      e.dataTransfer.setData('text/plain', 'drag-data');
    },
    handleDrop(e) {
      const data = e.dataTransfer.getData('text/plain');
      console.log('拖拽数据:', data);
    }
  }
};
</script>

使用第三方库 Vue.Draggable

Vue.Draggable 是一个基于 Sortable.js 的 Vue 拖拽组件库,适合复杂的拖拽场景,如列表排序和跨列表拖拽。

vue实现拖拽添加

安装 Vue.Draggable:

vue实现拖拽添加

npm install vuedraggable

示例代码:

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

<script>
import draggable from 'vuedraggable';
export default {
  components: { draggable },
  data() {
    return {
      list: [
        { id: 1, name: 'Item 1' },
        { id: 2, name: 'Item 2' }
      ]
    };
  },
  methods: {
    onDragEnd() {
      console.log('拖拽完成后的列表:', this.list);
    }
  }
};
</script>

自定义拖拽逻辑

如果需要更灵活的拖拽逻辑,可以结合 Vue 的指令和事件系统实现自定义拖拽功能。

<template>
  <div>
    <div 
      v-draggable 
      @drag-start="onDragStart" 
      @drag-end="onDragEnd"
    >
      自定义拖拽元素
    </div>
    <div 
      class="drop-target" 
      @dragover.prevent 
      @drop="onDrop"
    >
      放置目标
    </div>
  </div>
</template>

<script>
export default {
  directives: {
    draggable: {
      inserted(el, binding) {
        el.setAttribute('draggable', true);
        el.addEventListener('dragstart', (e) => {
          binding.value && binding.value(e);
          el.dispatchEvent(new CustomEvent('drag-start'));
        });
        el.addEventListener('dragend', () => {
          el.dispatchEvent(new CustomEvent('drag-end'));
        });
      }
    }
  },
  methods: {
    onDragStart(e) {
      e.dataTransfer.setData('text/plain', 'custom-data');
    },
    onDrop(e) {
      const data = e.dataTransfer.getData('text/plain');
      console.log('接收到的数据:', data);
    },
    onDragEnd() {
      console.log('拖拽结束');
    }
  }
};
</script>

注意事项

  • 拖拽时需要阻止默认行为(如 @dragover.prevent),否则可能无法触发 drop 事件。
  • 跨浏览器兼容性需测试,部分旧版浏览器可能不支持某些 API。
  • 移动端拖拽可能需要额外处理触摸事件。

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

相关文章

vue的艾特功能实现

vue的艾特功能实现

Vue 的 @ 功能实现 在 Vue 中实现类似社交平台的 @ 功能,通常涉及输入框的监听、用户匹配和选择插入。以下是具体实现方法: 监听输入框内容 使用 v-model 绑定输入框内容,并通过 @…

vue实现过滤

vue实现过滤

Vue实现过滤的方法 在Vue中实现数据过滤可以通过多种方式完成,以下是几种常见的方法: 使用计算属性过滤 计算属性是Vue中处理数据过滤的理想选择,它们基于响应式依赖进行缓存,只有在相关依赖发生改…

vue实现flbook

vue实现flbook

Vue 实现类似 Flbook 的翻页效果 要实现类似 Flbook 的翻页效果,可以使用 Vue 结合 CSS 动画和 JavaScript 事件处理。以下是实现方法: 安装依赖 需要安装 vue…

vue实现加减

vue实现加减

Vue 实现加减功能 在 Vue 中实现加减功能可以通过数据绑定和事件监听来完成。以下是一个简单的实现方法: 模板部分 <template> <div> <…

vue实现树形

vue实现树形

Vue 实现树形组件 在 Vue 中实现树形结构通常需要递归组件和动态数据绑定。以下是实现树形组件的几种常见方法。 递归组件实现 递归组件是 Vue 中实现树形结构的核心方法。通过组件调用自身,可以…

vue实现转页面

vue实现转页面

Vue 实现页面跳转的方法 在 Vue 中实现页面跳转通常可以通过以下几种方式完成,具体取决于项目结构和需求。 使用 router-link 组件 router-link 是 Vue Router…