当前位置:首页 > 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

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

安装:

vue实现拖拽的插件

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 结合使用,适合需要高度自定义的场景。

安装:

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实现一个插件系统

vue实现一个插件系统

实现插件系统的核心思路 Vue的插件系统允许通过Vue.use()注册全局功能,通常包含以下要素: 暴露install方法供Vue调用 添加全局资源(指令/过滤器/组件等) 注入组件选项 添加实例方…

拖拽实现vue

拖拽实现vue

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

vue滚动插件实现

vue滚动插件实现

vue滚动插件实现方法 使用vue-virtual-scroller 安装依赖包: npm install vue-virtual-scroller 注册组件: import VueVirtual…

vue实现插件功能

vue实现插件功能

Vue 插件实现方法 安装与注册插件 在 Vue 项目中,插件通常以独立模块形式存在。通过 Vue.use() 方法注册插件,该方法会自动调用插件的 install 函数。 // 引入插件 imp…

php 插件实现

php 插件实现

PHP 插件实现方法 PHP 插件可以通过多种方式实现,具体取决于插件的用途和功能需求。以下是一些常见的实现方法: 使用钩子(Hooks)和过滤器(Filters) 钩子和过滤器是一种常见的插件架…

vue实现拖拽替换

vue实现拖拽替换

实现拖拽替换的基本思路 使用HTML5的拖放API结合Vue的响应式数据绑定,可以轻松实现元素的拖拽替换功能。核心是利用draggable属性、dragstart、dragover和drop事件。…