SortableJS拖拽排序


近期使用SortableJS插件实现了前端页面table行拖拽排序,在这里📝一下
SortableJS官方文档

一、引入SortableJS

引入SortableJS可以有以下几种方式:

// npm
npm i sortablejs

// yarn
yarn add -D sortablejs 

// CDN引入
<script src="https://cdn.jsdelivr.net/npm/sortablejs@latest/Sortable.min.js"></script>

二、使用SortableJS

页面:正常使用table组件

<!-- 正常使用table组件即可 -->
<el-table :data="dataList" highlight-current-row v-loading="loading"  border>
  <el-table-column prop="No" :label="$t('index.number')" width="100"></el-table-column>
  <el-table-column prop="Room" :label="$t('index.group')"></el-table-column>
  <el-table-column prop="Msg1" :label="$t('list.Info1')"></el-table-column>
  <el-table-column prop="Msg2" :label="$t('list.Info2')"></el-table-column>
  <el-table-column prop="Msg3" :label="$t('list.Info3')"></el-table-column>
</el-table>

js部分:
1、引入Sortable 2、在method中定义初始化Sortable函数 3、在mounted生命周期中调用初始化Sortable函数
SortableJS配置项

// 1、在对应的页面引入Sortable
import Sortable from 'sortablejs'

// 2、在method中定义初始化Sortable函数
initSortTable() {
  // 获取table对象(这里可以根据自己的页面上table组件情况来获取)
  const el = document.querySelectorAll('.el-table__body-wrapper > table > tbody')[0]
  // const sortable = new Sortable(el, options);
  // 根据具体需求配置options配置项
  this.sortable = new Sortable(el, {
    group: "name",
    sort: true,  // boolean 定义是否列表单元是否可以在列表容器内进行拖拽排序
    animation: 150,  // ms, number 单位:ms,定义排序动画的时间

    onEnd: (evt) => { // 监听拖动结束事件
      console.log(this) // this是当前vue上下文
      console.log(111,evt.oldIndex) // 当前行的被拖拽前的顺序
      console.log(222,evt.newIndex) // 当前行的被拖拽后的顺序

      const currRow = this.dataList[evt.oldIndex];
      this.dataList[evt.oldIndex] = this.dataList[evt.newIndex];
      this.dataList[evt.newIndex] = currRow;
      // 将排序结果更新到数据库中,根据自己项目的逻辑进行实现即可。
      console.log('排序成功,将结果保存到数据库中。。。。。',this.dataList)
    }
  })
},
mounted () {
  this.initSortTable()//页面组件渲染完毕初始化Sortable
},

效果图如下:


文章作者: nzgl
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 nzgl !
评论
  目录