如何在vue中使用拖动排序组件sortablejs

news2024/9/23 23:28:54

效果图:

在这里插入图片描述
1.首先,我们需要在vue项目中安装依赖:

npm install -save sortablejs

2.创建demo文件=>demoTest.vue,直接附上实例代码:

<template>
  <div>
    <div id="table-names">
      <div class="tableItem" v-for="item of tableData" :key="item.id">
        <span>{{ item.id }}</span>
        =>
        <span>{{ item.name }}</span>
        =>
        <span>{{ item.sort }}</span>
      </div>
    </div>
    <el-button @click="refreshData">刷新</el-button>
    <el-button @click="initData">取缓存</el-button>
  </div>
</template>

<script>
import Sortable from 'sortablejs'
let tableDemoSort = 'DEMOSORT'
const list = [
  {name: 'laowang1', id: '0', sort: 1},
  {name: 'laowang2', id: '1', sort: 2},
  {name: 'laowang3', id: '2', sort: 3},
  {name: 'laowang4', id: '3', sort: 4}
]
export default {
  data(){
    return{
      tableData:[]
    }
  },
  computed: {},
  created() {
    this.initData()
  },
  mounted(){
    this.dragTable()
  },
  methods:{
    initData() {
      let stData = this.getTableDataToLocalStorage()
      console.log('initData=>stData', JSON.stringify(stData))
      if (stData) {
        this.tableData = JSON.parse(JSON.stringify(stData))
        // this.$forceUpdate()
      } else {
        this.tableData = list
      }
      this.setTableDataToLocalStorage(this.tableData)
    },
    refreshData() {
      this.tableData = list
      this.setTableDataToLocalStorage(this.tableData)
    },
    setTableDataToLocalStorage(data) {
      localStorage.setItem(tableDemoSort, JSON.stringify(data))
    },
    getTableDataToLocalStorage() {
      return JSON.parse(localStorage.getItem(tableDemoSort))
    },
    dragTable(){
      let el = document.getElementById('table-names')
      Sortable.create(el, {
        animation: 200,
        chosenClass: "chosenClass",  // 被选中项的css 类名
        // dragClass: "dragClass",  // 正在被拖拽中的css类名
        onEnd: evt => {
          let {oldIndex, newIndex} = evt
          this.switchMapOrder(oldIndex, newIndex)
        }
      })
    },
    switchMapOrder(oldIndex, newIndex){
      console.log(`oldIndex: ${oldIndex}, newIndex: ${newIndex}`)
      const tableData = this.tableData
      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.tableData = newTableData
      // this.$forceUpdate()
      this.setTableDataToLocalStorage(newTableData)
      // this.dragTable()
    }
  }
}
</script>

<style>
#table-names {
  display: flex;
  flex-direction: column;
}
.tableItem{
  padding: 6px 10px;
  cursor: pointer;
}
.sortable-chosen{
  background-color: blue;
}

/* // 拖拽 */
.dragClass {
  background-color: rgba(0, 188, 235, 0.5) !important;
  color: #0000a3 !important;
}
/* // 停靠 */
.ghostClass {
  background-color: rgba(0, 191, 243, 0.1) !important;
}
/* // 选择 */
.chosenClass {
  background-color: rgba(0, 188, 235, 0.2) !important;
}
</style>

3.提供一个列表拖动排序的文档,想要了解更多,请查看文档:http://www.sortablejs.com/options.html

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

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

相关文章

nodeJS 的 npm 设置国内高速镜像之淘宝镜像的方法

1、我们知道 nodeJS 是老外搞出来的&#xff0c;服务器放在了国外&#xff0c;国内的小朋友访问起来会比较慢&#xff0c;阿里巴巴的淘宝给出了有力支持&#xff0c;现在我们就将 nodeJS 的镜像地址切换为国内的淘宝镜像。 2、查看当前的镜像地址&#xff1a; npm get registr…

Optimism为 CQT提供价值 20 万美元的生态系统资助,以表彰其支持

Covalent Network&#xff08;CQT&#xff09; 是 Web3 生态系统中关键的“数据可用性”层&#xff0c;在与 Optimism Collective 多年的合作中取得了骄人的成果。Covalent Network&#xff08;CQT&#xff09;对于 Optimism 跨链数据的增长产生了直接的影响&#xff0c;而这一…

成为CSDN博客优质创作者或者博客专家吧

成为CSDN博客优质创作者或者博客专家吧 文章目录 成为CSDN博客优质创作者或者博客专家吧一、前言二、如何成为CSDN的博客专家1、2009年的要求和申请方式2、最新的CSDN博客专家要求和申请方式3、创作者身份认证4、CSDN所有认证的介绍 三、写博客的好处1、比较官方的说法&#xf…

labelimg 在pycharm下载使用

labelimg 使用数据标注工具 labelimg 制作数据集 在pycharm中搜索labelimg 选择版本安装 labelimg install 使用数据标注工具制作数据集 启动 带参数启动 1、cmd cd到指定目录 2、带参数启动标注工具 左侧可以选择切换为需要的数据格式 一些快捷键 和自动保存&#xff0c…

字节3面真题,LeetCode上hard难度,极具启发性题解

文章目录 &#x1f680;前言&#x1f680;LeetCode&#xff1a;41. 缺失的第一个正整数&#x1f680;思路&#x1f680;整个代码思路串一下&#x1f680;Code &#x1f680;前言 铁子们好啊&#xff01;阿辉来讲道题&#xff0c;这道题据说是23年字节3面真题&#xff0c;LeetC…

类加载器的三种+双亲委派机制大概了解

类加载器有哪几种分别是加载哪些类的 类加载一共可以分为三种&#xff1a; 分别为&#xff1a; 启动类加载器&#xff08;Bootstrap Class Loader&#xff09;&#xff1a;负责加载Java的核心类库&#xff0c;如java.lang包中的类。扩展类加载器&#xff08;Extension Class …

jsp教务管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 教务管理系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql5.0&…

功能强大的国外商业PHP在线教育系统LMS源码,直播课程系统

源码介绍 Proacademy是在线教育一体化的解决方案&#xff0c;用于创建类似于Udemy、Skillshare、Coursera这种在线教育市场。 这个平台提供在线课程&#xff0c;现场课程&#xff0c;测验等等&#xff0c;并有一个基于实际业务需要的高级认证插件&#xff0c;程序基于Laravel…

Three.js学习8:基础贴图

一、贴图 贴图&#xff08;Texture Mapping&#xff09;&#xff0c;也翻译为纹理映射&#xff0c;“贴图”这个翻译更直观。 贴图&#xff0c;就是把图片贴在 3D 物体材质的表面&#xff0c;让它具有一定的纹理&#xff0c;来为 3D 物体添加细节的一种方法。这使我们能够添加…

使用会话API实现会话管理

使用会话API实现会话管理 问题陈述 Larry Wiliams是Countryside Markets服装部的负责人。Larry让公司网站的开发人员John开发一个应用程序,以便跟踪用户选择地衬衫并相应地更新金额。 解决方案 要解决上述问题,John需要执行以下任务: 创建Web应用程序。创建登录页面。创建验…

【机器学习】数据清洗之识别缺失点

&#x1f388;个人主页&#xff1a;甜美的江 &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;机器学习 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、交流进步…

飞天使-linux操作的一些技巧与知识点8-zabbix6.0 容器搭建

文章目录 安装docker安装步骤mysql下载镜像安装zabbix 测试效果 安装docker 1. 配置官方 yum 源$ sudo yum install -y yum-utils $ sudo yum-config-manager \--add-repo \https://download.docker.com/linux/centos/docker-ce.repo2. 安装 Docker$ sudo yum install docker-c…

并发编程 java锁机制

1、什么是锁&#xff0c;为什么需要锁&#xff1f; 并发环境下&#xff0c;会存在多个线程对同一个资源进行争抢的情况&#xff0c;假设线程A对资源正在进行修改&#xff0c;此时线程B又对同一资源进行了修改&#xff0c;就会导致数据不一致的问题。为了解决这个问题&#xff…

不到1s生成mesh! 高效文生3D框架AToM

论文题目&#xff1a; AToM: Amortized Text-to-Mesh using 2D Diffusion 论文链接&#xff1a; https://arxiv.org/abs/2402.00867 项目主页&#xff1a; AToM: Amortized Text-to-Mesh using 2D Diffusion 随着AIGC的爆火&#xff0c;生成式人工智能在3D领域也实现了非常显著…

【人工智能】横扫市场的巨星大模型:探秘当今最热门的AI力量(14)

今年&#xff0c;ChatGPT成了大家的明星&#xff0c;简直是个神奇的助手&#xff01;问什么问题&#xff0c;都秒回&#xff0c;写各种文字、甚至代码&#xff0c;简直是工作利器。而国内这半年AI领域热度不减&#xff0c;涌现了一批新公司和产品&#xff0c;大厂也在风头上。A…

【学习笔记】TypeScript编译选项

TS 中的编译选项 我们写了一个TS的文件&#xff0c;我们需要使用如下的命令将我们的TS文件转换为JS文件。 tsc xxx.ts 这样会产生一个对应的js文件 自动编译文件 编译文件时&#xff0c;使用 -W 指令后&#xff0c;TS编译器会自动监视文件的变化&#xff0c;并在文件发生变…

MySQL篇之定位与优化MySQL慢查询

一、如何定位慢查询 1.方案一&#xff1a;开源工具 调试工具&#xff1a;Arthas。 运维工具&#xff1a;Prometheus 、Skywalking。 2.方案二&#xff1a;MySQL自带慢日志 慢查询日志记录了所有执行时间超过指定参数&#xff08;long_query_time&#xff0c;单位&#xff1a;…

Habitat环境学习四:Habitat-sim基础用于导航——使用导航网格NavMesh

如何使用导航网格NavMesh 官方教程1、NavMesh基础定义1.1 使用NavMesh的原因1.2 什么是NavMesh 2、NavMesh的使用方法2.1 获取自上而下Top down view视角地图2.2 在NavMesh中进行查询以及随机产生可导航点2.3 查找最短路径2.4 场景加载NavMesh2.5 重新计算并生成NavMesh2.6 什么…

python-分享篇-画樱花

文章目录 画樱花代码效果 画樱花 代码 from turtle import * from random import * from math import *def tree(n,l):pd()#下笔#阴影效果t cos(radians(heading()45))/80.25pencolor(t,t,t)pensize(n/3)forward(l)#画树枝if n>0:b random()*1510 #右分支偏转角度c ran…

openGauss学习笔记-216 openGauss性能调优-确定性能调优范围-硬件瓶颈点分析-CPU

文章目录 openGauss学习笔记-216 openGauss性能调优-确定性能调优范围-硬件瓶颈点分析-CPU216.1 CPU216.2 查看CPU状况216.3 性能参数分析 openGauss学习笔记-216 openGauss性能调优-确定性能调优范围-硬件瓶颈点分析-CPU 获取openGauss节点的CPU、内存、I/O和网络资源使用情况…