当前位置:首页 > 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 原生拖拽 API HTML5 提供了原生拖拽 API,可以通过 draggable 属性结合事件监听实现拖拽功能。 <template>…

vue 实现动态表单

vue 实现动态表单

Vue 实现动态表单的方法 动态表单通常指表单字段可以动态增减或根据条件变化。以下是几种实现方式: 使用 v-for 动态渲染表单字段 通过数组存储表单字段数据,利用 v-for 动态渲染:…

vue实现表单提交

vue实现表单提交

Vue 表单提交的实现方法 Vue 提供了多种方式实现表单提交,以下是常见的几种方法: 双向绑定(v-model) 使用 v-model 实现表单数据的双向绑定,通过方法处理提交逻辑: <t…

vue实现页面拖拽

vue实现页面拖拽

Vue 实现页面拖拽的方法 使用原生 HTML5 拖拽 API HTML5 提供了原生的拖拽 API,可以通过 draggable 属性和相关事件实现拖拽功能。在 Vue 中可以直接使用这些 API。…

vue实现拖拽分类

vue实现拖拽分类

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

vue实现拖拽事件

vue实现拖拽事件

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