vue+sortablejs来实现列表拖拽——sortablejs的使用

news2024/10/6 22:33:52

sortablejs官网:https://sortablejs.com/

最近在看form-builder组件,发现里面有用到sortablejs插件,用于实现拖拽效果。
在这里插入图片描述
但是这个官网中的配置,实在是看不懂,太简单又太复杂,不实用。
下面记录一下我的使用:

实现效果

1.左侧可以拖拽到右侧
2.右侧不可以拖拽到左侧
3.左侧不可重复拖拽到右侧,且拖拽后左侧数据不变
4.上下拖拽后,数据自动排序

解决步骤1:安装npm install sortablejs --save

解决步骤2:在页面中局部引入

import Sortable from 'sortablejs';

解决步骤3:html部分代码

<div style="display: flex">
  <div id="table-names" style="flex: 1">
    <div class="tableItem" v-for="item of tableData" :key="item.id">
      <span>{{ item.id }}</span>
      =>
      <span>{{ item.sort }}</span>
    </div>
  </div>
  <div id="table-names2" style="flex: 1">
    <div class="tableItem" v-for="item of tableData2" :key="item.id">
      <span>{{ item.id }}</span>
      =>
      <span>{{ item.sort }}</span>
    </div>
  </div>
</div>

在这里插入图片描述

解决步骤4:js部分代码

在mounted中添加以下代码:

let el = document.getElementById('table-names');
Sortable.create(el, {
  animation: 200,
  group: 'shared',
  chosenClass: 'chosenClass', // 被选中项的css 类名
  // dragClass: "dragClass",  // 正在被拖拽中的css类名
  onEnd: (evt) => {
    let { oldIndex, newIndex } = evt;
    this.switchMapOrder(oldIndex, newIndex);
  },
});
let el2 = document.getElementById('table-names2');
Sortable.create(el2, {
  animation: 200,
  chosenClass: 'chosenClass', // 被选中项的css 类名
  onEnd: (evt) => {
    let { oldIndex, newIndex } = evt;
    this.switchMapOrder2(oldIndex, newIndex);
  },
});

两个方法定义如下:

 switchMapOrder(oldIndex, newIndex) {
      console.log(`oldIndex: ${oldIndex}, newIndex: ${newIndex}`);
      const tableData = this.tableData;
      let resultData = []; // 结果数组
      // 先把被移动的那条数据单独取出来
      let beSpliceItem = tableData.splice(oldIndex, 1);
      if (this.tableData[oldIndex] && this.tableData[oldIndex].id) {
        let findIndex = this.tableData2.findIndex(
          (item) => item.id == this.tableData[oldIndex].id
        );
        if (findIndex == -1) {
          this.tableData2.splice(newIndex, 0, this.tableData[oldIndex]);
        }
      }
      // 把剩下的数据复制给结果数组
      resultData = tableData;
      // 把被移动的那条数据赋值给结果数组
      resultData.splice(newIndex, 0, beSpliceItem[0]);
      // 遍历结果数组,让sort重新排序
      let newTableData = [];
      resultData.forEach((item, index) => {
        item.sort = index + 1;
        newTableData.push(item);
      });
      this.tableData = newTableData;
      console.log(222, this.tableData2, this.tableData2.length);
    },
    switchMapOrder2(oldIndex, newIndex) {
      console.log(`oldIndex: ${oldIndex}, newIndex: ${newIndex}`);
      const tableData = this.tableData2;
      let resultData = []; // 结果数组
      // 先把被移动的那条数据单独取出来
      let beSpliceItem = tableData.splice(oldIndex, 1);
      // 把剩下的数据复制给结果数组
      resultData = tableData;
      // 把被移动的那条数据赋值给结果数组
      resultData.splice(newIndex, 0, beSpliceItem[0]);
      // 遍历结果数组,让sort重新排序
      let newTableData = [];
      resultData.forEach((item, index) => {
        item.sort = index + 1;
        newTableData.push(item);
      });
      this.tableData2 = newTableData;
      console.log(this.tableData2);
    },

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

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

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

相关文章

sklearn的make_blobs函数

make_blobs是一个用于生成随机数据点的实用函数&#xff0c; from sklearn.datasets import make_blobs X,Y make_blobs(n_samples2000,n_features2,centers12,cluster_std0.05,center_box[-5,5],random_state21)n_samples: 要生成的样本数量。centers: 要生成的簇&#xff0…

JetsonNano —— Windows下对Nano板卡烧录刷机(官方教程)

介绍 NVIDIA Jetson Nano™ 开发者套件是一款面向创客、学习者和开发人员的小型 AI 计算机。按照这个简短的指南&#xff0c;你就可以开始构建实用的 AI 应用程序、酷炫的 AI 机器人等了。 烧录刷机 1、下载 Jetson Nano开发者套件SD卡映像&#xff0c;并记下它在计算机上的保存…

docker部署小试

一 1.1 需求&#xff1a;根据docker部署nginx并且实现https 1.2 前期准备 准备一台装备好的docker-ce虚拟机&#xff0c;容量至少满足4G/2C&#xff0c;同时做好关闭防火墙的操作 systemctl stop firewalld setenforce 0 1.3 实验部署 1.3.1 创建并进入文件夹 1.3.2 编辑run脚本…

XSKY SDS 6.4 重磅更新:NFS 性能飙升 3 倍,对象多站点等 10 多项功能强势升级

近日&#xff0c;XSKY星辰天合发布了 XSKY SDS V6.4 新版本&#xff0c;该版本在文件的性能提升、对象容灾能力完善方面改进异常显著&#xff0c;同时也大幅提高了存储系统的安全特性&#xff0c;适配更多的信创软硬件生态。 近来&#xff0c;软件定义存储&#xff08;SDS&…

pymysql用法整理--python实现mysql数据库操作

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 本文着重整理pymsql的常用方法 不专门讲解MySQL数据库的相关知识 常用基本语法汇总 import pymysql#连接数据库 connpymysql.connect(host127.0.0.1,port3306,userroot,password123456,charsetutf8,db"expe…

洛谷 P4148:简单题 ← KD-Tree模板题

【题目来源】https://www.luogu.com.cn/problem/P4148【题目描述】 你有一个 NN 的棋盘&#xff0c;每个格子内有一个整数&#xff0c;初始时的时候全部为 0&#xff0c;现在需要维护两种操作&#xff1a; ● 1 x y A → 1≤x,y≤N&#xff0c;A 是正整数。将格子 (x,y) 里的数…

韩国站群服务器提供高级安全防护以确保数据和网站的安全性

韩国站群服务器提供高级安全防护以确保数据和网站的安全性 在当今数字化时代&#xff0c;网站的安全性和数据保护已成为企业和个人不可忽视的重要议题。韩国站群服务器作为一个拥有发达科技和互联网基础设施的国家&#xff0c;通过提供高级安全防护措施&#xff0c;为用户的数…

安卓surfaceview的使用方式

1. 什么是surfaceview surfaceview内部机制和外部层次结构 在安卓开发中&#xff0c;我们经常会遇到一些需要高性能、高帧率、高画质的应用场景&#xff0c;例如视频播放、游戏开发、相机预览等。这些场景中&#xff0c;我们需要直接操作图像数据&#xff0c;并且实时地显示到…

后端常用技能:解决java项目前后端传输数据中文出现乱码、问号问题

0. 问题背景 最近做一个解析数据的小工具&#xff0c;本地运行时都正常&#xff0c;发布到服务器上后在导出文件数据时发现中文全部变成了问号&#xff0c;特此记录下问题解决的思路和过程 1. 环境 java 1.8 springboot 2.6.13 额外引入了fastjson&#xff0c;commons-csv等…

##07 从线性回归到神经网络:PyTorch实战解析

文章目录 前言线性回归基础理论背景实现步骤神经网络介绍理论背景实现步骤从线性回归到神经网络结论前言 在深度学习的浩瀚宇宙中,线性回归和神经网络是两个基本但极其重要的概念。线性回归模型是统计学和机器学习的基石之一,而神经网络则是深度学习技术的核心。本文旨在通过…

【日志革新】在ThinkPHP5中实现高效TraceId集成,打造可靠的日志追踪系统

问题背景 最近接手了一个骨灰级的项目&#xff0c;然而在项目中遇到了一个普遍的挑战&#xff1a;由于公司采用 ELK&#xff08;Elasticsearch、Logstash、Kibana&#xff09;作为日志收集和分析工具&#xff0c;追踪生产问题成为了一大难题。尽管 ELK 提供了强大的日志分析功…

在时间同步应用上节省大量时间!德思特GNSS模拟器是怎么做到的?

​ 作者介绍 德思特Safran GNSS模拟器是一款综合解决方案&#xff0c;专为精确的PNT&#xff08;位置、导航和时间&#xff09;仿真与测试设计。它超越了传统GNSS定位导航仿真&#xff0c;也能提供极高的授时精度。 这款模拟器对于评估和提升GNSS接收机及同步系统的整体性能至…

前端JS必用工具【js-tool-big-box】,验证是否是Unicode字符,获取一个字符串的字节长度,以及新增发送JSONP跨域请求的方法

js-tool-big-box&#xff0c;目前已经收集到了用户需求&#xff0c;希望可以添加一些公用方法&#xff0c;我觉得这很好&#xff0c;我们一起把这个前端通用工具做大一些&#xff0c;帮助更多的小伙伴少些util代码&#xff0c;更多的关注于自己的业务开发&#xff0c;真是不错。…

OpenCV与AI深度学习 | 如何使用YOLOv9检测图片和视频中的目标

本文来源公众号“OpenCV与AI深度学习”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;如何使用YOLOv9检测图片和视频中的目标 1 介绍 在之前的文章中&#xff0c;我们探索了使用 YOLOv8 进行对象检测。现在&#xff0c;我们很高兴…

【仪酷LabVIEW AI工具包案例】使用LabVIEW AI工具包+YOLOv5结合Dobot机械臂实现智能垃圾分类

‍‍&#x1f3e1;博客主页&#xff1a; virobotics(仪酷智能)&#xff1a;LabVIEW深度学习、人工智能博主 &#x1f384;所属专栏&#xff1a;『仪酷LabVIEW AI工具包案例』 &#x1f4d1;上期文章&#xff1a;『【YOLOv9】实战二&#xff1a;手把手教你使用TensorRT实现YOLOv…

Spring - 7 ( 13000 字 Spring 入门级教程 )

一&#xff1a;Spring Boot 日志 1.1 日志概述 日志对我们来说并不陌生&#xff0c;我们可以通过打印日志来发现和定位问题, 或者根据日志来分析程序的运行过程&#xff0c;但随着项目的复杂度提升, 我们对日志的打印也有了更高的需求, 而不仅仅是定位排查问题 比如有时需要…

关于 c++ 中字符串 string 及 常量字符串的换行与使用

&#xff08;1&#xff09;例如 cout << " ddddddddddddddddddd" 。当输出字符太长&#xff0c;就需要换行。疑问是如何写代码&#xff0c;才可以保证源代码中的字符串换行被正确编译呢&#xff1f;测试一下&#xff0c;如下图可见&#xff0c;如此换行&#x…

STM32:GPIO输入输出

文章目录 1、GPIO介绍1.1 GPIO的基本结构1.1 GPIO的位结构 2、 GPIO工作模式3、GPIO标准外设库接口函数3.1 RCC接口函数3.2 GPIO接口函数3.2.1 GPIO的读取函数3.2.1 GPIO的写入函数 4、GPIO的初始化 1、GPIO介绍 GPIO&#xff08;General Purpose Input Output&#xff09;通用…

【MQTT】服务端、客户端工具使用记录

目录 一、服务端 1.1 下载 1.2 相关命令 &#xff08;1&#xff09;启动 &#xff08;2&#xff09;关闭 &#xff08;3&#xff09;修改用户名和密码 1.3 后台管理 &#xff08;1&#xff09;MQTT配置 &#xff08;2&#xff09;集群概览 &#xff08;3&#xff09;…

场外期权个股怎么对冲?

今天期权懂带你了解场外期权个股怎么对冲&#xff1f;场外个股期权是一种在非交易所市场进行的期权交易&#xff0c;它允许投资者针对特定的股票获得未来买入或卖出的权利。 场外期权个股怎么对冲&#xff1f; 持有相反方向的期权&#xff1a;这是最直接的对冲方法&#xff0c…