当前位置:首页 > VUE

vue实现表单拖拽

2026-03-30 01:08:03VUE

Vue 实现表单拖拽的方法

使用 Vue.Draggable 库

Vue.Draggable 是基于 Sortable.js 的 Vue 组件,适用于列表拖拽排序。

安装依赖:

vue实现表单拖拽

npm install vuedraggable

示例代码:

vue实现表单拖拽

<template>
  <draggable v-model="formItems" @end="onDragEnd">
    <div v-for="item in formItems" :key="item.id">
      {{ item.name }}
    </div>
  </draggable>
</template>

<script>
import draggable from 'vuedraggable'

export default {
  components: { draggable },
  data() {
    return {
      formItems: [
        { id: 1, name: '输入框' },
        { id: 2, name: '选择框' }
      ]
    }
  },
  methods: {
    onDragEnd() {
      console.log('拖拽完成')
    }
  }
}
</script>

原生 HTML5 拖放 API

适用于需要自定义拖拽行为的场景。

<template>
  <div 
    v-for="item in formItems" 
    :key="item.id"
    draggable="true"
    @dragstart="dragStart($event, item)"
    @dragover.prevent
    @drop="drop($event, item)"
  >
    {{ item.name }}
  </div>
</template>

<script>
export default {
  data() {
    return {
      formItems: [...],
      draggedItem: null
    }
  },
  methods: {
    dragStart(event, item) {
      this.draggedItem = item
      event.dataTransfer.effectAllowed = 'move'
    },
    drop(event, targetItem) {
      const index = this.formItems.indexOf(this.draggedItem)
      const targetIndex = this.formItems.indexOf(targetItem)
      this.formItems.splice(index, 1)
      this.formItems.splice(targetIndex, 0, this.draggedItem)
    }
  }
}
</script>

表单生成器拖拽实现

适用于可视化表单设计场景。

<template>
  <div class="form-builder">
    <div class="components-panel">
      <div 
        v-for="comp in components"
        :key="comp.type"
        draggable
        @dragstart="dragComponent = comp"
      >
        {{ comp.name }}
      </div>
    </div>

    <div 
      class="form-canvas"
      @dragover.prevent
      @drop="addComponent"
    >
      <form-item 
        v-for="(item, index) in formItems"
        :key="item.id"
        :item="item"
        @delete="removeItem(index)"
      />
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      dragComponent: null,
      components: [
        { type: 'input', name: '文本框' },
        { type: 'select', name: '下拉框' }
      ],
      formItems: []
    }
  },
  methods: {
    addComponent() {
      if (this.dragComponent) {
        this.formItems.push({
          ...this.dragComponent,
          id: Date.now()
        })
      }
    },
    removeItem(index) {
      this.formItems.splice(index, 1)
    }
  }
}
</script>

注意事项

  1. 移动端需额外处理 touch 事件
  2. 复杂拖拽场景建议使用专业库如 interact.js
  3. 拖拽状态可配合 CSS 过渡效果提升体验
  4. 大数据量列表需做虚拟滚动优化

以上方法可根据具体需求组合使用,Vue.Draggable 适合简单排序场景,原生 API 提供更大灵活性,表单生成器模式适合可视化搭建系统。

标签: 表单拖拽
分享给朋友:

相关文章

拖拽实现vue

拖拽实现vue

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

vue 实现拖拽甘特图

vue 实现拖拽甘特图

实现拖拽甘特图的核心思路 Vue 实现拖拽甘特图需要结合第三方库或自定义逻辑,核心功能包括任务条渲染、时间轴刻度、拖拽交互、数据绑定等。以下是具体实现方法: 使用第三方库(推荐) vue-gantt…

react如何提交表单

react如何提交表单

表单提交的基本方法 在React中提交表单通常通过控制组件状态和事件处理实现。表单数据通过onSubmit事件捕获,并阻止默认提交行为以避免页面刷新。 import { useState } fro…

如何封装表单react

如何封装表单react

封装 React 表单的方法 封装 React 表单可以通过创建可复用的表单组件或自定义 Hook 来实现。以下是几种常见的方法: 使用受控组件封装表单 通过状态管理表单数据,将表单字段的值与 Re…

js实现图片拖拽

js实现图片拖拽

实现图片拖拽的基本步骤 HTML 结构需要包含可拖拽的图片元素,并设置 draggable 属性为 true: <img id="dragImage" src="image.jpg" drag…

vue实现拖拽表格

vue实现拖拽表格

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