vue结合element-ui实现列表拖拽变化位置,点击拖动图标拖动整个列表元素,使用tsx格式编写

news2024/9/30 17:36:39

先来看下需要实现的效果

当鼠标放在左侧图标上时,可以拖动整个列表元素,调整顺序
在这里插入图片描述

思路介绍

使用draggable可以设置元素可拖动,然后分别设置三个事件处理函数,监听onDragstart、onDragover、onDragend三个事件
注意:如果在正常vue文件中,事件名为@dragstart、@dragover、@dragend

  • onDragstart函数中,获取当前拖拽的元素在数组中的索引并存储
  • onDragover中,判断当前元素超过了哪个元素,并存储此时所在位置的索引
  • onDragEnd中,根据刚才记录的索引对数组重新赋值

遇到的问题

由于要实现的功能是点击左侧的图标才可以拖动列表元素,但是draggable如果设置在整个列表元素,点击拖动哪里都可以,因此需要进行额外设置
新存储变量allowDrop,当鼠标点击左侧图标时,设置该变量为true,离开时设置为false
对于列表,当allowDrop为true时才允许拖动

模板部分代码

{
		  //注意这里是tsx格式
          this.itemData.length > 0 ? (
            ).map((item:sourceType, index:number) => (
            //在div上设置draggable并绑定处理函数
            //注意无法直接绑定在el-card上,会失效
              <div 
                draggable={this.allowDrop}
                onDragstart={() => this.handleStartDrag(index)}
                onDragover={() => this.handleCover(index)}
                onDragend={this.handleDragEnd}
              >
                <el-card
                  shadow="never"
                  body-style="padding: 10px;"
                >
                  <div class="left-icon" onMousedown={this.handleMouseDown} onMouseleave={this.handlMouseLeave}>
                    <i class="el-icon-s-operation"></i>
					自己的内容
                </el-card>
              </div>
            ))
          ) : '没有找到数据源'
        }

函数及变量部分代码

//存储数组数据
const itemData=ref([])

//记录当前拖拽的元素的索引
const curDragingIndex=ref()
//记录排序后的数据
let tempData:sourceType[]=[]

//开始拖拽,记录被拖拽的元素的索引
const handleStartDrag=(index:number)=>{
  curDragingIndex.value=index
}
//被覆盖
const handleCover=(index:number)=>{
  if((!curDragingIndex.value && curDragingIndex.value !== 0) || curDragingIndex.value === index){
    return;
  }
  const copyData = [...itemData.value];
  const deletedArr = copyData.splice(curDragingIndex.value, 1);
  copyData.splice(index, 0, ...deletedArr);
  tempData = copyData;
}
//拖拽结束,对数组进行重新赋值,即可实现位置变化
const handleDragEnd=()=>{
  curDragingIndex.value=null
  if(tempData.length){
    itemData.value=tempData
  }
}

//是否允许进行拖拽
const allowDrop=ref(false)
//处理鼠标事件
//当鼠标点击左侧图标时设置为true
const handleMouseDown=()=>{
  allowDrop.value=true
}
//鼠标离开时设置为false
const handlMouseLeave=()=>{
  allowDrop.value=false
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2180251.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于STM32的智能温度监控系统

目录 引言项目背景环境准备 硬件准备软件安装与配置系统设计 系统架构关键技术代码示例 传感器数据采集与处理温度监控与报警显示功能应用场景结论 1. 引言 温度监控系统在许多应用场景中具有重要作用&#xff0c;例如工业、农业以及家居生活。通过使用STM32微控制器、温度传…

Excel:常用函数

一、DAYS&#xff08;返回两个日期之间的天数&#xff09; 以下演示是在windows操作系统环境&#xff0c;office软件进行操作的 1.1 单元格设置日期格式 1.2 设置Days函数 公式&#xff1a;DAYS(C2,B2) 全部天数 二、SUM&#xff08;求和&#xff09; 公式&#xff1a;SUM(…

第二届两岸新经济产业发展研讨会闭幕,爱迪斯通董事长发表演讲

9月29日&#xff0c;第二届两岸新经济产业发展研讨会在福州高新区圆满落幕。此次研讨会由清华大学两岸发展研究院主办&#xff0c;福州市招商行动领导小组办公室、福州高新区承办&#xff0c;汇聚了两岸的专家学者及企业家代表近200人&#xff0c;共同探讨新质生产力的发展与两…

宠物医院微信小程序源码

文章目录 前言研究背景研究内容一、主要技术&#xff1f;二、项目内容1.整体介绍&#xff08;示范&#xff09;2.系统分析3.数据表信息4.运行截图5.部分代码介绍 总结 前言 随着当代社会科技的迅速发展&#xff0c;计算机网络时代正式拉来帷幕&#xff0c;它颠覆性的影响着社会…

【回眸】Tessy 单元测试软件使用指南(四)常见报错及解决方案与批量初始化的经验

前言 分析时Tessy的报错 1.fatal error: Tricore/Compilers/Compilers.h: No such file or directory 2.error: #error "Compiler unsupported" 3.warning: invalid suffix on literal;C11 requires a space between literal and string macro 4.error: unknown…

YOLOv7改进:Unified-loU,用于高品质目标检测的统一loU ,2024年8月最新IoU

💡💡💡现有IoU问题点:IoU (Intersection over Union)作为模型训练的关键,极大地显示了当前预测框与Ground Truth框之间的差异。后续研究者不断在IoU中加入更多的考虑因素,如中心距离、纵横比等。然而,仅仅提炼几何差异是有上限的;而且新的对价指数与借据本身存在潜在…

优化Mysql

目录 Mysql优化就四种&#xff1a;定位慢查询/sql执行计划/索引/Sql优化经验... 2 1Mysql如何定位慢查询&#xff1f;... 2 2Sql语句执行很慢&#xff0c;如何分析呢&#xff1f;... 3 2.1那这个SQL语句执行很慢,如何分析呢?. 3 3&#xff0e;了解过索引吗?(什么是索引)…

DC00018基于java swing+MySQL花卉信息管理系统

1、项目功能演示 DC00018基于java swingMySQL花卉信息管理系统java项目信息管理系统 2、项目功能描述 基于java swingMySQL花卉信息管理系统 系统包括用户信息管理以及花卉信息管理等功能。 3、项目运行截图 4、项目核心代码 4.1 日期格式化 package utils;import java.t…

C++ STL容器(四) —— vector底层剖析

这篇讲解vector&#xff0c;不说废话&#xff0c;直接开始&#xff01; 文章目录 原理UML类图代码实现构造函数插入元素删除元素清空容器析构函数赋值运算符 案例分析 原理 这里简单说一下 vector 的大致思想&#xff0c;动态数组&#xff0c;即它的长度会随着我们插入元素而产…

【YOLO目标检测二维码数据集】共3112张、已标注txt格式、有训练好的yolov5的模型

目录 说明图片示例 说明 数据集格式&#xff1a;YOLO格式 图片数量&#xff1a;3112 标注数量(txt文件个数)&#xff1a;3112 标注类别数&#xff1a;1 标注类别名称&#xff1a;qrcode 数据集下载&#xff1a;二维码数据集 图片示例 数据集图片&#xff1a; 数据集…

【开源免费】基于SpringBoot+Vue.JS微服务在线教育系统(JAVA毕业设计)

本文项目编号 T 060 &#xff0c;文末自助获取源码 \color{red}{T060&#xff0c;文末自助获取源码} T060&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…

【hot100-java】【合并两个有序链表】

记忆中&#xff0c;两个指针合并即可。 建立哨兵节点dum /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* ListNode(int val, ListNode next) { t…

idea启动项目报错Command line is too long

idea启动项目报错 Command line is too long. Shorten command line for Idmap5CoreApplication or also for Spring Boot default configuration? 选择出问题的项目&#xff0c;shorten command line 选项选择 JAR manifest 或者 classpath file 选项

用责任链模式改造 if else

我的上一篇文章&#xff0c;因为if else 多了&#xff0c;捣鼓很久&#xff0c;今天用责任链模式改造一下。 代码写着写着&#xff0c;if else if 逻辑忘记了&#xff0c;哎。。。-CSDN博客 责任链模式&#xff08;Chain of Responsibility Pattern&#xff09; 1. 什么是责任…

SpringBoot之Profile的两种使用方式

0. 需求 通常项目开发过程中&#xff0c;会经历多种环境转换&#xff0c;典型的如开发环境(dev)、测试环境(test)和生产环境(prod)。在这三种不同的环境下&#xff0c;连接数据库时使用的配置信息是不同的&#xff0c;即三个不同环境对应三个不同的数据库。 现在的需求是&#…

【论文导读】Graphusion (LLM + KGC)

序言 第一次论文出现在 《Leveraging Large Language Models for Concept Graph Recovery and Question Answering in NLP Education》 论文地址&#xff1a;https://arxiv.org/abs/2402.14293 七月份的时候应该是又改进了一次。但是又发了一篇新的地址&#xff1a;《Graphu…

css 中 ~ 符号、text-indent、ellipsis、ellipsis-2、text-overflow: ellipsis、::before的使用

1、~的使用直接看代码 <script setup> </script><template><div class"container"><p><a href"javascript:;">纪检委</a><a href"javascript:;">中介为</a><a href"javascript:…

SpringAOP实现的两种方式-JDK动态代理和CGLIB动态代理

前言 想要了解SpringAOP的实现方式&#xff0c;需要先了解什么是AOP OOP和AOP的区别 OOP 面向对象&#xff0c;允许开发者定义纵向的关系&#xff0c;但并适用于定义横向的关系&#xff0c;导致了大量代码的重复&#xff0c;而不利于各个模块的重用。 AOP&#xff0c;一般称为…

让小脚本成为自己高效测试的工具

测试中会遇到的工具 软件测试如果仅仅靠手工去执行会发现在很多地方力不从心&#xff0c;虽然市面上已经有大牛开源了一些测试工具可以供我们使用但是在一些公司特有的业务方面则需要我们借助开源或重新做一个自己的测试工具。 测试常用的开源工具 死链接检测工具 Xenu home…

如何使用便签高效管理自己的工作和时间?

在快节奏的现代生活中&#xff0c;我们每天都要面对众多工作任务&#xff0c;而时间却是有限的。如何在有限的时间内高效地完成工作&#xff0c;成为了每个职场人士必须面对的挑战。为了更好地管理时间&#xff0c;提高工作效率&#xff0c;我们往往需要借助一些工具来帮助我们…