当前位置:首页 > 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,适合简单场景。

实现示例:

<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实现拖拽的插件

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

相关文章

jquery插件下载

jquery插件下载

jQuery插件下载方法 访问jQuery官方网站(jquery.com)下载最新版本的jQuery库。官网提供压缩版(minified)和未压缩版(uncompressed)两种格式,适用于不同开发…

vue实现拖拽表格

vue实现拖拽表格

Vue 实现拖拽表格的方法 使用第三方库(推荐) 推荐使用 vuedraggable 或 sortablejs 这类成熟的拖拽库,它们对 Vue 有良好支持且功能丰富。 安装 vuedraggab…

vue实现图片插件

vue实现图片插件

Vue 图片插件实现方案 在 Vue 中实现图片插件通常涉及图片展示、懒加载、预览等功能。以下是几种常见的实现方式: 基础图片组件封装 创建一个可复用的图片组件,支持默认图片、加载失败处理等基础功…

vue实现元素拖拽

vue实现元素拖拽

Vue 实现元素拖拽的方法 使用 HTML5 原生拖拽 API HTML5 提供了原生拖拽 API,可以通过 draggable 属性结合事件监听实现拖拽功能。 <template>…

vue实现树形拖拽

vue实现树形拖拽

Vue 实现树形拖拽的方法 使用 vue-draggable 插件 安装 vue-draggable 插件: npm install vuedraggable --save 在组件中引入并使用:…

vue实现可拖拽

vue实现可拖拽

实现拖拽功能的基本方法 在Vue中实现拖拽功能通常可以通过HTML5的Drag and Drop API或第三方库如vuedraggable来完成。以下是两种主要实现方式: 使用HTML5原生API…