使用elementUI实现表格行拖拽改变顺序,无需引入外部库
前言:
使用vue2+element UI,且完全使用原生的拖拽事件,无需引入外部库。
如果表格数据量较大,或需要更多复杂功能,可以考虑使用 vuedraggable库,提供更多配置选项和拖拽功能。
思路:
1. 通过el-table的
row-class-name设置行的自定义class类名2. 在
mounted和updated生命周期钩子中调用this.$nextTick,确保 DOM 元素渲染完成后,使用document.querySelectorAll获取所有.drag-row元素。3. 设置dom的 draggable为true,并增加拖拽事件处理函数:
ondragstart:记录拖拽开始的索引,并设置拖拽效果。ondragover:在拖拽经过时,阻止默认行为,允许放置。ondrop:在拖拽放下时,交换源位置和目标位置的数据,并更新列表。在拖拽事件内 通过 修改数据的index的方式实现 行位置的移动
handleDragStart方法:
- 记录当前拖拽行的索引
draggingIndex。- 使用
event.dataTransfer.setData方法存储拖拽数据,方便在ondrop中使用。
handleDrop方法:
- 获取拖拽的源索引
sourceIndex和目标索引targetIndex。- 通过数组的
splice方法删除源位置的项目,并插入到目标位置。- 更新组件的数据
projects,触发 Vue 的响应式更新,表格会重新渲染显示新的排序。
效果演示:
完整代码:
<template><div class="sort-container"><span class="title">项目排序</span><!-- 通过 row-class-name 为每一行动态添加行的类名 --><el-table:data="projects"row-class-name="drag-row"@row-contextmenu.preventborder><el-table-column prop="index" label="序号" width="200"><template slot-scope="scope">{{ scope.$index + 1 }}</template></el-table-column><el-table-column prop="name" label="项目名称"></el-table-column></el-table></div>
</template><script>
export default {data() {return {projects: [{ id: '1', name: '男子10米气步枪' },{ id: '2', name: '女子50米步枪三姿' },{ id: '3', name: '男子双向飞碟' },{ id: '4', name: '女子25米手枪' },{ id: '5', name: '男子50米步枪卧射' },],draggingIndex: null,// 当前正在拖拽的行索引};},mounted() {// 组件挂载后添加拖拽事件this.addDragEvents();},updated() {// 数据更新后重新添加拖拽事件// 使用 this.$nextTick 获取表格行的 DOM 元素this.$nextTick(() => {this.addDragEvents();});},methods: {// 添加拖拽事件addDragEvents() {// 获取所有带有类名 'drag-row' 的表格行const rows = document.querySelectorAll('.drag-row');// 遍历每一行,添加拖拽事件rows.forEach((row, index) => {row.draggable = true; // 设置行元素为可拖拽// 开始拖拽时的事件处理row.ondragstart = (event) => this.handleDragStart(event, index);// 拖拽经过时的事件处理row.ondragover = (event) => this.handleDragOver(event);// 拖拽放下时的事件处理row.ondrop = (event) => this.handleDrop(event, index);});},// 处理拖拽开始事件handleDragStart(event, index) {this.draggingIndex = index; // 记录当前拖拽行的索引event.dataTransfer.effectAllowed = 'move'; // 设置拖拽效果为移动event.dataTransfer.setData('text/plain', index); // 将索引存储到拖拽数据中},// 处理拖拽经过事件handleDragOver(event) {event.preventDefault(); // 阻止默认事件,允许放置event.dataTransfer.dropEffect = 'move'; // 设置拖拽效果为移动},// 处理拖拽放下事件handleDrop(event, targetIndex) {const sourceIndex = this.draggingIndex; // 获取开始拖拽时记录的索引// 如果源索引和目标索引相同,直接返回if (sourceIndex === targetIndex) return;// 创建项目列表的副本const projects = [...this.projects];// 删除源位置的项目,并存储被拖拽的项目const [movedItem] = projects.splice(sourceIndex, 1);// 在目标位置插入被拖拽的项目projects.splice(targetIndex, 0, movedItem);// 更新项目列表数据this.projects = projects;this.draggingIndex = null; // 重置拖拽索引},},
};
</script><style lang='scss' scoped>
.sort-container{padding: 15px;.title{font-size: 24px;font-weight: bold;}.el-table{margin-top: 20px;}
}
/* 自定义拖拽行样式 */
.drag-row {cursor: move;user-select: none;
}
.drag-row:hover {background-color: #f0f9ff;
}
</style>
相关文章:
使用elementUI实现表格行拖拽改变顺序,无需引入外部库
前言: 使用vue2element UI,且完全使用原生的拖拽事件,无需引入外部库。 如果表格数据量较大,或需要更多复杂功能,可以考虑使用 vuedraggable库,提供更多配置选项和拖拽功能。 思路: 1. 通过el-table的ro…...
PySpark 数据处理实战:从基础操作到案例分析
Spark 的介绍与搭建:从理论到实践_spark环境搭建-CSDN博客 Spark 的Standalone集群环境安装与测试-CSDN博客 PySpark 本地开发环境搭建与实践-CSDN博客 Spark 程序开发与提交:本地与集群模式全解析-CSDN博客 Spark on YARN:Spark集群模式…...
恒源云使用手册记录:从服务器下载数据到本地
文章目录 一、xftp下载二、通过Xftp客户端连接站点 一、xftp下载 先下载xftp:下载连接 二、通过Xftp客户端连接站点 右击文件,点击新建 名称可以任意 主机、端口号、用户名 点击这里的复制登录命令 比如我这里得到ssh -p 41604 rooti-2.gpushare.co…...
【大咖云集 | IEEE计算智能学会广州分会支持】第四届信息技术与当代体育国际学术会议(TCS 2024,12月13-15日)
第四届信息技术与当代体育国际学术会议(TCS 2024) 2024 4th International Conference on Information Technology and Contemporary Sports 重要信息 会议官网:www.icitcs.net(会议关键词:TCS 2024) 202…...
【AI声音克隆整合包及教程】第二代GPT-SoVITS V2:技术、应用与伦理思考
一、引言 在当今科技迅速发展的时代,声音克隆技术成为人工智能领域的一个备受瞩目的分支。GPT-SoVITS V2作为一种声音克隆工具,正逐渐进入人们的视野,它在多个领域展现出巨大的潜力,同时也引发了一系列值得深入探讨的问题。本文旨…...
利用AI制作《职业生涯规划PPT》,10分钟完成
职业生涯规划是大学生活中非常重要的一环。通过制定职业规划,你能够明确未来的职业目标、认清自身的优劣势,进而制定切实可行的计划,以便顺利踏上职业发展的道路。而制作一份精美的职业生涯规划PPT,能有效帮助你在面试、职业规划报…...
【Java多线程】线程安全及解决方案(详解)
目录 线程安全问题引入: 线程安全原因 如何解决线程安全问题? (1)synchronized关键字 1)sychronized关键字的特性: 2)可重⼊ synchronized使⽤⽰例 (2)volatile关键字 1)内存可见性和…...
【前端基础】Javascript取整函数以及向零取整方式
向零取整方式 在JavaScript中,有多种方式可以对数字进行取整操作,即去掉小数部分,只保留整数部分。其中,向0取整(也称为截断小数部分)的方式有以下几种常用的方法: 使用 Math.trunc()ÿ…...
禅道与Jira与Ones对比:哪个更适合你的项目管理需求?
一、项目管理工具的重要性 在当今复杂的项目环境中,选择合适的项目管理工具对项目成功至关重要。随着项目规模的不断扩大、涉及领域的日益广泛以及团队成员的分散性,传统的项目管理方式已经难以满足需求。 项目管理工具可以帮助团队更好地规划和组织项…...
Linux I/O编程:I/O多路复用与异步 I/O对比
文章目录 0. 引言1. I/O 模型简介1.1 阻塞 I/O(Blocking I/O)1.2 非阻塞 I/O(Non-Blocking I/O)1.3 信号驱动式 I/O(Signal-Driven I/O)1.4 多路复用 I/O(I/O Multiplexing)1.5 异步…...
Spark Plan 之 SQLMetric
SQLMetric Spark Plan 包含以下基本 方法, /*** return All metrics containing metrics of this SparkPlan.*/def metrics: Map[String, SQLMetric] Map.empty/*** return [[SQLMetric]] for the name.*/def longMetric(name: String): SQLMetric metrics(name)…...
基于YOLOv5模型的火焰识别系统
大家好,YOLOv5模型能够快速准确地检测到火灾火焰,在火灾初期甚至是刚刚出现火苗时就发出警报。这为及时采取灭火措施争取了宝贵的时间,极大地降低了火灾造成的损失。系统可以对特定区域进行持续实时监测,无论白天还是夜晚…...
多模态AI:开启人工智能的新纪元
在人工智能的璀璨星河中,多模态AI技术正逐渐成为一颗耀眼的明星。随着科技的飞速发展,AI技术正以前所未有的速度迈向新的高峰,其中多模态AI的兴起尤为引人注目。本文将深入探讨多模态AI的定义、技术原理、应用场景以及未来发展趋势。 ps.图…...
麒麟信安支撑2024年电力监控系统网络安全加固培训护航电力网络安全!
在网络安全形势日益复杂的今天,电力行业的网络安全尤为重要。为提升电力监控系统网络安全运维人员的专业技能,由国调中心网安处精心策划,国家电网技术学院组织开展的“2024年电力监控系统网络安全加固培训”于近日圆满结束。麒麟信安作为重要…...
横表和纵表 中的横表
图1 图2...
7个常用的JavaScript数组操作进阶用法
文章目录 1、查找数组中的最大值方法一:使用 Math.max 和展开运算符方法二:使用 for 循环逐一比较 2、查找数组中的第二大值方法一:排序后取第二大值方法二:遍历找到第二大值 3、去除数组中的重复项4、合并两个有序数组并保持有序5、旋转数组…...
Spark的Standalone集群环境安装
一.简介 与MR对比: 概念MRYARNSpark Standalone主节点ResourceManagerMaster从节点NodeManagerWorker计算进程MapTask,ReduceTaskExecutor 架构:普通分布式主从架构 主:Master:管理节点:管理从节点、接…...
Android Glide动态apply centerCropTransform(),transition withCrossFade动画,Kotlin
Android Glide动态apply centerCropTransform(),transition withCrossFade动画,Kotlin import android.graphics.Bitmap import android.os.Bundle import android.widget.ImageView import androidx.appcompat.app.AppCompatActivity import com.bumptech.glide.Glide import …...
shukla方差和相对平均偏差
参考资料:实用统计学【李奉令】 Eberhart-Russell模型、Shukla模型、相对平均偏差稳定性分析比较 相对平均偏差在品种稳定性分析中的作用 1、Shukla方差 生物统计中,用于描述一个群体离散程度的统计量有离差、方差、极差等, 国内品种区域试…...
双指针(二)双指针到底是怎么个事
一.有效的三角形个数 有效的三角形个数 class Solution {public int triangleNumber(int[] nums) {Arrays.sort(nums);int i0,end nums.length-1;int count 0;for( i end;i>2;i--){int left 0;int right i-1;while(left<right){if(nums[left]nums[right]>nums…...
农业IoT部署卡在MQTT连接失败?Python异步通信优化全链路解析(含田间实测吞吐量对比数据)
第一章:农业IoT部署卡在MQTT连接失败?Python异步通信优化全链路解析(含田间实测吞吐量对比数据)在华北平原某智慧农场的边缘网关部署中,23台土壤温湿度传感器频繁出现MQTT连接超时与会话重置现象,平均重连耗…...
移动端ECharts实战:如何隐藏原生滚动条实现内容区域左右滑动(附完整代码)
移动端ECharts进阶:原生滚动条隐藏与手势滑动优化全解析 在移动端数据可视化项目中,ECharts的默认滚动条交互常常成为用户体验的"阿喀琉斯之踵"。当用户手指在狭小的滚动条上艰难拖动时,那种顿挫感和操作失败率会让精心设计的数据图…...
[AI开发工具] Cursor Pro功能扩展技术指南:突破免费版限制的系统方法
[AI开发工具] Cursor Pro功能扩展技术指南:突破免费版限制的系统方法 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve re…...
Word空白页删不掉?【图文讲解】怎么删除word空白页?word批量删除空白页?5种方法教你彻底删除
(1)问题背景谁在编辑 Word 时没被顽固空白页气到抓狂?写论文、做报告、整理文案,明明内容已经结束,页面末尾偏偏多出一页空白,删也删不掉、退也退不去。打印时白白浪费纸张,上交文档显得格外不专…...
告别序列‘拉直’的暴力美学:手把手复现MaIR,体验保持图像局部与连续性的Mamba新玩法
告别序列“拉直”的暴力美学:手把手复现MaIR,体验保持图像局部与连续性的Mamba新玩法 在计算机视觉领域,图像修复任务(如去噪、超分、去模糊)一直是研究热点。传统方法往往将2D图像“拉直”为1D序列进行处理࿰…...
微信聊天记录永久保存与智能分析:WeChatMsg完全使用指南
微信聊天记录永久保存与智能分析:WeChatMsg完全使用指南 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/WeC…...
天理与上帝——东西情理的源初图腾
天理与上帝——东西情理的源初图腾---摘要东西方文明在情理结构的根本差异,可以追溯到各自的“源初图腾”——天理与上帝。本文基于AI元人文“自感痕迹论”的框架,将天理与上帝重新理解为两种不同的“源初痕迹”或“自感显影的定向模式”。天理是“天人合…...
DeepSeek-OCR开源镜像多场景实践:跨境电商多语言产品说明书自动本地化预处理
DeepSeek-OCR开源镜像多场景实践:跨境电商多语言产品说明书自动本地化预处理 1. 项目背景与价值 跨境电商企业在全球化运营中面临着一个共同挑战:产品说明书的多语言本地化。传统方式需要人工翻译、重新排版设计,整个过程耗时耗力且成本高昂…...
嵌入式C语言变量初始化技术详解
## 1. 嵌入式C语言变量初始化技术详解### 1.1 初始化的重要性与基本原则在嵌入式系统开发中,变量初始化是防止未定义行为的关键步骤。由于嵌入式编译器特性的差异,未初始化的变量可能包含随机值,导致系统出现不可预测的行为。根据变量类型的不…...
Pixel Fashion Atelier保姆级教程:修复WebUI中文乱码与像素字体缺失问题
Pixel Fashion Atelier保姆级教程:修复WebUI中文乱码与像素字体缺失问题 1. 问题背景与现象 Pixel Fashion Atelier作为一款融合复古像素风格的AI图像生成工具,其独特的界面设计是其核心亮点之一。然而,部分用户在部署和使用过程中可能会遇…...
