全网为数不多清晰可行的在VUE中使用sortable.js实现动态拖拽排序的教程!

目录

0 写在前面的

1 依赖安装

2 手写简单标签演示

3 要点

4 效果


0 写在前面的

首先批评以下文章

(10条消息) sortable.js 实现拖拽_sortablejs_花铛的博客-CSDN博客

(10条消息) sortablejs拖拽排序功能(vue)_C_fashionCat的博客-CSDN博客

他们写出的东西都是不经过验证的!!!你们这态度,请不要随便发表博客!! 

进入正题

1 依赖安装

环境说明:Vue2环境

安装命令:npm install sortablejs

2 手写简单标签演示

    <table class="mysort">
      <tr class="thClass"><th>id</th><th >标题</th></tr>
      <tr class="myItem" v-for="item in tableData" :key="item.articleId">
        <td class="myId">{
   
   {item.articleId}}</td>
        <td class="myTitle">{
   
   {item.articleTitle}}</td>
      </tr>
    </table>
---------------  
data(){
    return{
      tableData: [
  {
    "articleId": 1314,
    "articleTitle": "想玩转Java,那这篇内容不能错过"
  },
  {
    "articleId": 1339,
    "articleTitle": "HTML、CSS、JavaScript、PHP、 MySQL 的学习顺序是什么?"
  },
  {
    "articleId": 1316,
    "articleTitle": "就业岗位只增不减!Java语言还能火多久?"
  },
  {
    "articleId": 1337,
    "articleTitle": "人类能实现大脑编程吗?"
  },
  {
    "articleId": 1333,
    "articleTitle": "万字泣血解析割韭菜内幕,程序员别老想着做副业"
  },
  {
    "articleId": 1338,
    "articleTitle": "MySQL 中删除的数据流落何方?"
  },
  {
    "articleId": 1315,
    "articleTitle": "量子力学?量子计算机?秒杀传统计算机的能力从何而来?"
  },
  {
    "articleId": 1331,
    "articleTitle": "计算机网络安全问题和日常防范措施"
  },
  {
    "articleId": 1334,
    "articleTitle": "99%的Java程序员会踩的6个坑"
  },
  {
    "articleId": 1335,
    "articleTitle": "用vue构建用户界面有哪些好处?"
  },
  {
    "articleId": 1336,
    "articleTitle": "这 11 种编程语言,还“活着”吗?"
  },
  {
    "articleId": 1346,
    "articleTitle": "12年的祖传“屎山”代码,年收入竟超1.4亿元?"
  },
  {
    "articleId": 1348,
    "articleTitle": "前端教程:开发流程中项目需求分析怎么做?"
  },
  {
    "articleId": 1350,
    "articleTitle": "大白话带你认识 JVM11"
  },
  {
    "articleId": 1353,
    "articleTitle": "sdcsd"
  },
  {
    "articleId": 1354,
    "articleTitle": "df"
  }
],
      sortData: [] // 拖拽数据
  }},
-------------------
  methods:{
    // 排序信息提交
    submitSort(){
     let ArrSortId=this.sortData.map((da)=>{
        return da.articleId;
      })
      console.log(ArrSortId)
      // 发送排序文章id向后端
    },
    // 拖拽
    rowDrop() {
      const tbody = document.querySelector(".mysort");
      Sortable.create(tbody, {
        animation: 300,
        delay: 10,
        // 如果有不想排序的,在这里按照class匹配的方式写出即可
        filter:".thClass",
        // 需要拖拽的标签的class,强烈推荐写
        draggable:".myItem",
        onEnd:({ newIndex, oldIndex })=>{
          let sortData = this.sortData;
          let temp=sortData[oldIndex-1]
          sortData.splice(oldIndex-1,1)
          sortData.splice(newIndex-1,-1,temp)
          this.sortData=sortData;
        }
      });
    },
  }

css

------------
.mysort{
  background-color: #fecfef;
  margin: 3px auto;
  font-size: 20px;
  user-select: none;
}
.thClass{
  background-color: #defaea;
  color: #000;
}
.myId{
  width: 200px;
  background-color: #667eea;
  color: #000;
}
.myTitle{
  width: 800px;
  background-color: #fbc2eb;
  color: #0c2a70;
}
.myItem :hover{
 background-color: #fddb92;
  font-size: 22px;
}
.myBut{
  position: fixed;
  top: 49%;
  right: 3%;
}

3 要点

其一就是不建议对原数组进行直接修改,建议先把它复制一份出来,对复制的数据进行修改,如果直接对原数字进行修改,会遇到许多坑。

其二就是注意那几个参数, Animation是动画持续时间,delay是动画的延时,这些不是重要的,重要的是下面两个, Filter过滤器的意思, Filter后面跟的参数是class的名字,如果想某个class不想被拖拽,即可在filter后面加上即可,注意要加上一个小点点。同理 draggable 后面跟的是需要拖拽的class记得把我们需要拖拽的标签上面都打上class哦。


其三就是onEnd的我们必须要写成箭头括号的形式,因为这样写就不会被vm进行管控,我们需要做的就是不被他管控。


其四的话需要注意层级关系,我们在获取元素的时候,一定需要填写的是所有需要拖拽标签的父亲标签的class。

4 效果

 

后端接受后,将数据库更改 

猜你喜欢

转载自blog.csdn.net/qq_53679247/article/details/130956215