欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 会展 > draggable插件——实现元素的拖动排序——拖动和不可拖动的两种情况处理

draggable插件——实现元素的拖动排序——拖动和不可拖动的两种情况处理

2024/12/27 1:35:35 来源:https://blog.csdn.net/yehaocheng520/article/details/144208941  浏览:    关键词:draggable插件——实现元素的拖动排序——拖动和不可拖动的两种情况处理

最近在写后台管理系统的时候,遇到一个需求,就是关于拖动排序的功能。

我之前是写过一个关于拖动表格的功能,此功能可以实现表格中的每一行数据上下拖动实现排序的效果。
vue——实现表格的拖拽排序功能——技能提升

但是目前我这边的需求是实现属性的拖动,直接上图:
在这里插入图片描述
比如上图,我要拖动【管制卡号】到【客供】的后面
在这里插入图片描述
话不多说,直接上代码:

解决步骤1:安装vuedraggable插件

npm install vuedraggable@2.24.3  //我这边安装的是这个版本,你也可以直接安装最新版本的,就是不指定版本号就是最新版本了

解决步骤2:局部页面使用

组件引入

import draggable from 'vuedraggable';

组件中的注册

components: { draggable },

效果图中左侧属性的渲染:
this.枚举列表 = ['测试','样板/批量','新单/返单']

<a-checkbox-groupv-model="canDragArr"
><draggable@start.stop="dragStart"@end.stop="dragEnd"@update.stop="onUpdate"><transition-group type="transition" name="field_list"><a-checkboxv-for="item1 in 枚举列表":key="item1":value="item1"style="min-width: 100px">{{ item1 }}</a-checkbox></transition-group></draggable>
</a-checkbox-group>

分析上面的代码:

关于拖动排序,要用到的函数有:【@start】【@end】【@update】

对应的函数:

dragStart() {//
},
dragEnd() {//
},
/*** draggable拖拽组件对象重新排序*/
onUpdate({ newIndex, oldIndex }) {const newColumnsList = [];// 防止页面变化const columnsList = JSON.parse(JSON.stringify(this.枚举列表));newColumnsList[newIndex] = columnsList[oldIndex];columnsList.splice(oldIndex, 1);columnsList.forEach((value, index) => {if (newColumnsList[index]) {newColumnsList[index + 1] = value;} else {newColumnsList[index] = value;}});console.log('newColumnsList', newColumnsList);
},

上面代码中的newColumnsList就是拖动排序后的数组了。。。

如果是部分参数不想支持拖动,怎么处理?

draggable插件是有属性可以设置不可拖动的。就是——filter
比如要将枚举列表中的【测试】一项设置为不可拖动的,则可以设置如下:

<draggable@start.stop="dragStart"@end.stop="dragEnd"filter=".unDrag"@update.stop="onUpdate"
><transition-group type="transition" name="field_list"><a-checkboxv-for="item1 in 枚举列表":key="item1":value="item1":class="[item1=='测试' ? 'unDrag' : '',]"style="min-width: 100px">{{ item1 }}</a-checkbox></transition-group>
</draggable>

但是这样就有一个问题,【测试】属性不可拖动了,但是其他的属性可以拖动到【测试】的前后,这样也不是我们想要的。

我们想要的效果是下面的这种:

在这里插入图片描述

所以最后我的处理办法是,将枚举列表分为可拖动和不可拖动两种。

完成!!!多多积累,多多收获!!!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com