当前位置:首页 > VUE

前端实现拖拽功能vue

2026-01-12 04:47:08VUE

使用 HTML5 拖放 API

在 Vue 中可以通过 HTML5 的原生拖放 API 实现拖拽功能。需要监听 dragstartdragoverdrop 事件。

<template>
  <div>
    <div 
      draggable="true" 
      @dragstart="handleDragStart"
      @dragend="handleDragEnd"
    >
      拖拽元素
    </div>
    <div 
      @dragover.prevent
      @drop="handleDrop"
    >
      放置区域
    </div>
  </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)
    },
    handleDragEnd() {
      console.log('拖拽结束')
    }
  }
}
</script>

使用第三方库 Vue.Draggable

Vue.Draggable 是基于 Sortable.js 的 Vue 拖拽组件,适合实现列表排序等复杂拖拽场景。

安装依赖:

前端实现拖拽功能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 自定义指令实现更灵活的拖拽控制。

前端实现拖拽功能vue

<template>
  <div v-draggable @drag-start="onDragStart" @drag-end="onDragEnd">
    可拖拽元素
  </div>
</template>

<script>
export default {
  directives: {
    draggable: {
      bind(el, binding, vnode) {
        el.setAttribute('draggable', true)

        el.addEventListener('dragstart', (e) => {
          vnode.context.$emit('drag-start', e)
        })

        el.addEventListener('dragend', (e) => {
          vnode.context.$emit('drag-end', e)
        })
      }
    }
  },
  methods: {
    onDragStart(e) {
      console.log('开始拖拽')
    },
    onDragEnd(e) {
      console.log('结束拖拽')
    }
  }
}
</script>

拖拽与动画结合

使用 Vue 的过渡系统为拖拽添加视觉效果。

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

<style>
.drag-item {
  transition: all 0.5s;
}
.drag-move {
  transition: transform 0.5s;
}
</style>

跨组件拖拽实现

通过 Vuex 或事件总线实现跨组件拖拽数据传递。

// 在Vuex中存储拖拽状态
state: {
  draggedItem: null
},
mutations: {
  setDraggedItem(state, item) {
    state.draggedItem = item
  }
}

// 在组件中使用
methods: {
  dragStart(item) {
    this.$store.commit('setDraggedItem', item)
  },
  drop(targetItem) {
    const draggedItem = this.$store.state.draggedItem
    // 处理拖拽逻辑
  }
}

标签: 拖拽功能
分享给朋友:

相关文章

拖拽式编程vue实现

拖拽式编程vue实现

拖拽式编程在 Vue 中的实现方法 使用 HTML5 原生拖放 API Vue 可以结合 HTML5 的拖放 API 实现基础拖拽功能。通过 draggable 属性标记可拖拽元素,监听 dragst…

vue实现拖拽改变尺寸

vue实现拖拽改变尺寸

Vue 实现拖拽改变尺寸的方法 使用原生 HTML5 拖拽 API 通过监听 mousedown、mousemove 和 mouseup 事件实现拖拽调整尺寸。创建一个可拖拽的元素,计算鼠标移动距离并…

vue实现产品使用功能

vue实现产品使用功能

Vue 实现产品功能的关键方法 组件化开发 Vue 的核心思想是组件化,将产品功能拆分为独立可复用的组件。每个组件包含模板、逻辑和样式,例如产品卡片组件可封装图片、名称、价格等元素。通过 props…

vue实现图标拖拽

vue实现图标拖拽

Vue 实现图标拖拽 使用 HTML5 拖放 API 在 Vue 中实现图标拖拽可以利用 HTML5 的拖放 API。通过 draggable 属性标记可拖拽元素,并监听 dragstart、drag…

vue 实现卡片拖拽

vue 实现卡片拖拽

Vue 实现卡片拖拽 使用 HTML5 原生拖拽 API HTML5 提供了原生的拖拽 API,可以通过 draggable 属性、dragstart、dragend、dragover 和 drop…

vue拖拽容器实现

vue拖拽容器实现

实现 Vue 拖拽容器的基本方法 使用 HTML5 原生拖拽 API 通过 draggable 属性和拖拽事件(dragstart、dragend、dragover、drop)实现基础拖拽功能。适用于…