当前位置:首页 > VUE

vue 实现 拖拽组件

2026-01-19 07:53:52VUE

Vue 实现拖拽组件的方法

使用 HTML5 原生拖拽 API

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

<template>
  <div
    draggable="true"
    @dragstart="handleDragStart"
    @dragend="handleDragEnd"
    @dragover.prevent
    @drop="handleDrop"
  >
    可拖拽元素
  </div>
</template>

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

使用第三方库 vue-draggable

vue-draggable 是基于 Sortable.js 的 Vue 拖拽组件库,适合列表排序、拖拽等复杂场景。

安装依赖:

npm install vuedraggable

示例代码:

<template>
  <draggable v-model="list" @end="onDragEnd">
    <div v-for="item in list" :key="item.id">
      {{ item.name }}
    </div>
  </draggable>
</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 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.textContent);
        });
      }
    }
  }
}
</script>

拖拽与动画结合

使用 Vue 的过渡动画(<transition>)增强拖拽效果,提升用户体验。

<template>
  <transition-group name="drag" tag="div">
    <div v-for="item in items" :key="item.id" draggable @dragstart="dragStart">
      {{ item.text }}
    </div>
  </transition-group>
</template>

<style>
.drag-move {
  transition: transform 0.3s ease;
}
</style>

跨组件拖拽实现

通过 Vuex 或事件总线实现跨组件的拖拽数据传递,适用于复杂应用场景。

// 在事件总线中传递拖拽数据
EventBus.$emit('drag-start', payload);

// 目标组件监听
EventBus.$on('drag-start', (payload) => {
  // 处理拖拽数据
});

以上方法可根据具体需求选择,从简单到复杂覆盖了常见拖拽场景的实现方案。

vue 实现 拖拽组件

标签: 组件拖拽
分享给朋友:

相关文章

vue实现组件封装

vue实现组件封装

Vue 组件封装方法 封装组件的基本步骤 创建独立的 .vue 文件,包含 template、script 和 style 三个部分。通过 props 接收父组件传递的数据,使用 $emit 触发自…

vue实现tooltips组件

vue实现tooltips组件

Vue实现Tooltips组件的方法 基础实现:使用Vue指令 创建一个自定义指令v-tooltip,通过鼠标事件触发提示框的显示与隐藏。 Vue.directive('tooltip', {…

vue组件的实现

vue组件的实现

Vue 组件的实现方式 Vue 组件可以通过多种方式实现,主要包括单文件组件(SFC)、全局注册和局部注册。以下是常见的实现方法: 单文件组件(SFC) 单文件组件是 Vue 最推荐的组件化开发方式…

vue实现模块拖拽

vue实现模块拖拽

Vue 实现模块拖拽的方法 使用 HTML5 原生拖拽 API HTML5 提供了原生拖拽 API,可以通过 draggable 属性、dragstart、dragend、dragover 和 dro…

vue实现多级组件

vue实现多级组件

Vue 多级组件实现方法 在 Vue 中实现多级组件通常涉及父子组件通信、动态组件或递归组件等技术。以下是几种常见实现方式: 父子组件嵌套 通过逐层嵌套组件实现多级结构,适用于固定层级场景:…

vue实现拖拽改变尺寸

vue实现拖拽改变尺寸

Vue 实现拖拽改变尺寸的方法 使用原生 HTML5 拖拽 API 通过监听 mousedown、mousemove 和 mouseup 事件实现拖拽改变尺寸。创建一个可拖拽的边界元素,调整目标元素的…