当前位置:首页 > VUE

vue实现拖拽的插件

2026-02-23 08:36:42VUE

vue-draggable

vue-draggable 是基于 Sortable.js 封装的 Vue 组件,支持 Vue 2 和 Vue 3,适用于列表拖拽排序场景。

安装:

npm install vuedraggable

基础用法(Vue 2):

<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('拖拽结束')
    }
  }
}
</script>

vue-drag-resize

适用于需要自由拖拽和调整大小的元素,如图片、窗口等组件。

安装:

npm install vue-drag-resize

基础用法:

<template>
  <vue-drag-resize 
    :w="200" 
    :h="200"
    @dragging="onDrag"
    @resizing="onResize">
    <p>可拖拽调整的组件</p>
  </vue-drag-resize>
</template>

<script>
import VueDragResize from 'vue-drag-resize'
export default {
  components: { VueDragResize },
  methods: {
    onDrag(newRect) {
      console.log('新位置:', newRect)
    },
    onResize(newRect) {
      console.log('新尺寸:', newRect)
    }
  }
}
</script>

interact.js

interact.js 是功能强大的纯 JavaScript 拖拽库,可与 Vue 结合使用,适合需要高度自定义的场景。

安装:

npm install interactjs

基础实现:

<template>
  <div ref="draggable" class="draggable-box">
    可拖拽元素
  </div>
</template>

<script>
import interact from 'interactjs'
export default {
  mounted() {
    interact(this.$refs.draggable)
      .draggable({
        onmove: event => {
          const target = event.target
          const x = (parseFloat(target.getAttribute('data-x')) || 0) + event.dx
          const y = (parseFloat(target.getAttribute('data-y')) || 0) + event.dy

          target.style.transform = `translate(${x}px, ${y}px)`
          target.setAttribute('data-x', x)
          target.setAttribute('data-y', y)
        }
      })
  }
}
</script>

<style>
.draggable-box {
  width: 100px;
  height: 100px;
  background: #42b983;
  cursor: move;
}
</style>

原生 HTML5 拖拽 API

Vue 可以直接使用 HTML5 原生拖拽 API,适合简单场景。

实现示例:

vue实现拖拽的插件

<template>
  <div 
    draggable="true"
    @dragstart="dragStart"
    @dragend="dragEnd">
    拖拽我
  </div>

  <div 
    @dragover.prevent
    @dragenter.prevent
    @drop="drop">
    放置区域
  </div>
</template>

<script>
export default {
  methods: {
    dragStart(e) {
      e.dataTransfer.setData('text/plain', '自定义数据')
    },
    drop(e) {
      const data = e.dataTransfer.getData('text/plain')
      console.log('接收到的数据:', data)
    }
  }
}
</script>

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

相关文章

vue实现拖拽到容器里

vue实现拖拽到容器里

实现拖拽到容器的基本步骤 安装并引入 Vue.Draggable 库,这是一个基于 Sortable.js 的 Vue 拖拽组件。可以通过 npm 或 yarn 进行安装。 npm install…

拖拽实现vue

拖拽实现vue

实现拖拽功能的基本思路 在Vue中实现拖拽功能可以通过HTML5的Drag and Drop API或第三方库如vuedraggable来完成。以下是两种常见方法的详细说明。 使用HTML5 Dra…

js 实现拖拽

js 实现拖拽

实现拖拽的基本步骤 在JavaScript中实现拖拽功能需要监听几个关键事件:mousedown、mousemove和mouseup。以下是实现的基本逻辑。 监听目标元素的mousedown事件,记…

uniapp 路由插件

uniapp 路由插件

在UniApp中,路由管理通常依赖框架内置的页面跳转API,但若需要更高级的路由功能(如动态路由、拦截器等),可通过以下插件或方案实现: 路由插件推荐 uni-simple-router 专为Uni…

vue怎么实现拖拽

vue怎么实现拖拽

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

div拖拽实现vue

div拖拽实现vue

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