当前位置: 首页 > news >正文

【vue3 + element plus 】拖动排序实现(只能拖拽一次的问题、拖动后的位置不准确问题)

1.使用sortablejs插件

用于el-table列表拖动排序

import Sortable from 'sortablejs' // 拖拽插件
mounted() { this.rowDrop() },
swap(arr, from, to) {
// 在这方法中按需求修改排序规则即可if (from < 0 || from >= arr.length || to < 0 || to >= arr.length) returnconst temp = arr[from]arr[from] = arr[to]arr[to] = tempreturn arr
},
rowDrop() {const that = thisconst tbody = document.querySelector('.el-table__body-wrapper tbody')Sortable.create(tbody, {animation: 100,delay: 100,handle: '.move',onEnd ({ newIndex, oldIndex }) {let tableData = that.tableDatathat.tableData = []tableData = that.swap(tableData, oldIndex, newIndex)that.tableData = tableData}})
},
<el-table row-key="id" :data="tableData" border style="width: 100%"><el-table-column prop="content" label="活动内容" align="center" /><el-table-column label="操作" align="center"><template v-slot="{ row }"><div><el-icon class="move"><Sort /></el-icon></div></template></el-table-column>
</el-table>

踩过的坑:
that.tableData = [] 因为重新渲染后,附加的拖拽事件丢失,所以需要置空来解决table只能拖拽一次的问题
row-key="id" 缺失会导致拖动后的位置不准确
class="move" 绑定触发拖动事件

2.使用sortablejs-vue3插件

npm库地址

用于普通标签、图标等拖动排序

import { Sortable } from 'sortablejs-vue3'const options = {ghostClass: 'ghost',dragClass: 'drag'
},
const itemKey = Math.random()const swap = (arr, from, to) = {// 在这方法中按需求修改排序规则即可if (from < 0 || from >= arr.length || to < 0 || to >= arr.length) returnconst temp = arr[from]if (from > to) { for (let i = from; i >= to; i--) { arr[i] = arr[i-1] } }if (from < to) { for (let i = from; i <= to; i++) { arr[i] = arr[i+1] } }arr[to] = tempreturn arr
},
const tagChange = (e) = {this.itemKey = Math.random()this.list= this.swap(this.list, e.oldIndex, e.newIndex)
},
const removeUser = (index) = {this.list.splice(index, 1)
},
<Sortable:key="itemKey":list="list":options="options"item-key="key"tag="div"@end="tagChange"
><template #item="{ element, index }"><div class="item"><el-tag closable @close="removeUser(index)"><span>{{element.name}}</span></el-tag></div></template>
</Sortable>

代码仅供参考

相关文章:

  • 计算机专业毕业设计之网课敏感词监控系统实现介绍
  • 网上书店商城项目采用SpringBoot+Vue前后端分离技术(商家端、移动端、PC端)
  • 新手如何入门Web3?
  • CPU与GPU的原理不同
  • FPGA - 滤波器 - IIR滤波器设计
  • 数据结构---排序算法
  • 金额转换但是接收对象类型未知时,金额转换公共方法囊括当对象为String\Integer\Number三种类型的转换方法
  • 计算机跨考现状,两极分化现象很严重
  • Python网络安全项目开发实战,如何看清Web攻击
  • 数据挖掘的基本介绍以及Python、pandas的基本应用
  • SqlServer添加索引
  • springboot优雅shutdown时如何保障异步线程的安全
  • 黑龙江等保测评与企业安全:携手共筑数字时代坚固防线
  • 一篇文章了解常用排序算法
  • MySQl基础入门⑯【操作视图】完结
  • const let
  • css的样式优先级
  • docker容器内的网络抓包
  • es的写入过程
  • HTML中设置input等文本框为不可操作
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • js中的正则表达式入门
  • k8s 面向应用开发者的基础命令
  • laravel 用artisan创建自己的模板
  • node.js
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • 解析 Webpack中import、require、按需加载的执行过程
  • 如何解决微信端直接跳WAP端
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 在Mac OS X上安装 Ruby运行环境
  • Java性能优化之JVM GC(垃圾回收机制)
  • ​io --- 处理流的核心工具​
  • ​人工智能书单(数学基础篇)
  • ​香农与信息论三大定律
  • #图像处理
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • (007)XHTML文档之标题——h1~h6
  • (js)循环条件满足时终止循环
  • (MonoGame从入门到放弃-1) MonoGame环境搭建
  • (二)Linux——Linux常用指令
  • (二十三)Flask之高频面试点
  • (七)c52学习之旅-中断
  • (三)elasticsearch 源码之启动流程分析
  • (十三)Maven插件解析运行机制
  • (算法)N皇后问题
  • **《Linux/Unix系统编程手册》读书笔记24章**
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET 2.0中新增的一些TryGet,TryParse等方法
  • .NET C#版本和.NET版本以及VS版本的对应关系
  • .NET Core 成都线下面基会拉开序幕
  • .NET I/O 学习笔记:对文件和目录进行解压缩操作
  • .NET NPOI导出Excel详解
  • .NET 动态调用WebService + WSE + UsernameToken
  • .NET企业级应用架构设计系列之应用服务器