使用Vue.Draggable的自定义拖拽表单是如何实现的

Vue.Draggable是一个基于Sortable.js的Vue拖拽插件,支持组件化,便于在Vue应用中集成。文章介绍了如何通过NPM或Yarn安装,以及使用的关键属性如group、sort、animation。此外,还详细列举了拖拽过程中涉及的事件,如start、end、sort等,并展示了如何配置拖拽分组和监听事件。最后,提供了代码示例来展示Vue.Draggable在实际应用中的用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Vue.Draggable 是一款基于 Sortable.js 实现的 vue 拖拽插件,实现组件化的思想,可以结合 Vue,使用起来更方便

// NPM 或 yarn 安装方式
 yarn add vuedraggable
 npm i -S vuedraggable
import draggable from 'vuedraggable';
components: {
   draggable
}
属性名称说明
group:group= “name”,相同的组之间可以相互拖拽
sort:sort= “true”,是否开启内部排序,如果设置为 false,它所在组无法排序,在其他组可以拖动排序
animation拖动时的动画效果,数字类型。如设置 animation=1000 表示 1 秒过渡动画效果

如果是单列拖拽用 group="people"

vue.draggable group 拖拽分组多组之间相互拖拽,可以实现不同数组之间相互拖拽。
比如 group 都为 componentsGroup 的组之间可以相互拖动,本文例子中 A 列和 B 列可以相互拖动,但是无法拖到 C 列。

设置方式,object,也可以通过自定义函数 function 实现复杂的逻辑

  group:{
       name:'componentsGroup',//组名为 itxst
       pull: true|false| 'clone'|array|function,//是否允许拖出当前组
       put:true|false|array|function,//是否允许拖入当前组
}

vue.draggable 全部事件列表

vue.draggable 拖拽时会触发各种事件,比如 start, add, remove, update, end, choose, unchoose, sort, filter, clone 事件,本文将列出 vue.draggable 的全部事件。

事件列表

事件名称说明
start开始拖动时触发的事件
add从一个数组拖拽到另外一个数组时触发的事件
remove移除事件
update拖拽变换位置时触发的事件
end拖拽完成时的事件
choose鼠标点击选中要拖拽元素时的事件
unchoose选中后松开鼠标的事件
sort位置变化时的事件
clone从一个数组拖拽到另外一个数组时触发的事件和 add 不同,clone 是复制了数组元素

网站参考:
vue.draggable 中文文档
✨Element UI 表单设计及代码生成器

代码参考:

<draggable
class="components-draggable"
:list="fieldListTheDisplayOfTheSameElement(element.list)"
:group="{ name: 'componentsGroup', pull: 'clone', put: false }"
:clone="cloneComponent"
draggable=".components-item"
:sort="true"
@end="onEnd"

>

<div
 v-for="(item, index) in fieldListTheDisplayOfTheSameElement(element.list)"
 :key="index"
 class="components-item"
 @click="addComponent(item)"
>
 <dd :class="[`components-body`, item.valType]">
{{ item.label }}
 </dd>
</div>
</draggable>
computed:{
   fieldListTheDisplayOfTheSameElement() {
      return function(array) {
        return this.fieldList.filter(item => {
          return array.includes(item.valType);
        });
      };
    }
}
computed:{
   fieldListTheDisplayOfTheSameElement() {
      return function(array) {
        return this.fieldList.filter(item => {
          return array.includes(item.valType);
        });
      };
    }
}
<draggable 
class="drawing-board" 
:list="field" 
:animation="340" 
:sort="true" 
:group="{ name: 'componentsGroup' }">
        <div>xxxxx内容展示xxxxx</div>
</draggable>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值