sortable.js 官网
拖放排序插件Sortable.js中文介绍
1. 安装 npm 或 yarn 安装
yarn add -D sortablejs
2. 使用
<script src="//unpkg.com/vue/dist/vue.js"></script>
<script src="//unpkg.com/element-ui@2.3.9/lib/index.js"></script>
<div id="app">
<template>
<el-table :data="tableData" style="width: 100%" :row-class-name="disabledDrag">
<el-table-column prop="date" label="日期" width="180" />
<el-table-column prop="name" label="姓名" width="180" />
<el-table-column prop="address" label="地址" />
</el-table>
</template>
</div>
var Main = {
data() {
return {
tableData: [{
date: '2016-05-02',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄'
}, {
date: '2016-05-04',
name: '王小跳',
address: '上海市普陀区金沙江路 1517 弄'
}, {
date: '2016-05-01',
name: '王小虎',
address: '上海市普陀区金沙江路 1519 弄'
}, {
date: '2016-05-03',
name: '王小跳',
address: '上海市普陀区金沙江路 1516 弄'
}]
}
},
methods: {
// 给表格添加 disableDrag 类
disabledDrag({row}) {
if (row.name === '王小跳') {
return 'disabled-drag';
} else {
return '';
}
}
},
mounted() {
const selector = '.el-table__body-wrapper > table > tbody';
const el = document.querySelectorAll(selector)[0];
Sortable.create(el, {
onMove: evt => {
const {dragged, related} = evt;
console.log(dragged, related); // 拿到拖动元素和交换位置的相关元素,可做一些操作,比如某些条件下禁止拖动排序
},
onEnd: evt => {
// 拖动结束
},
filter: '.disabled-drag'
});
}
}
var Ctor = Vue.extend(Main)
new Ctor().$mount('#app')
@import url("//unpkg.com/element-ui@2.3.9/lib/theme-chalk/index.css");
.el-table {
.disabled-drag {
color: #909399;
}
}
效果:
jsfiddle 在线演示
3. 小结
事件:
onChoose
:function 列表单元被选中的回调函数
onStart
:function 列表单元拖动开始的回调函数
onEnd
:function 列表单元拖放结束后的回调函数
onAdd
:function 列表单元添加到本列表容器的回调函数
onUpdate
:function 列表单元在列表容器中的排序发生变化后的回调函数
onRemove
:function 列表元素移到另一个列表容器的回调函数
onFilter
:function 试图选中一个被filter过滤的列表单元的回调函数
onMove
:function 当移动列表单元在一个列表容器中或者多个列表容器中的回调函数
onClone
:function 当创建一个列表单元副本的时候的回调函数
事件对象:
to
:HTMLElement--移动到列表容器
from
:HTMLElement--来源的列表容器
item
:HTMLElement--被移动的列表单元
clone
:HTMLElement--副本的列表单元
oldIndex
:number/undefined--在列表容器中的原序号
newIndex
:number/undefined--在列表容器中的新序号
方法
option(name[,value])
获得或者设置项参数,使用方法类似于jQuery用法,没有第二个参数为获得option中第一个参数所对应的值,有第二个参数时,将重新赋给第一个参数所对应的值;
toArray()
序列化可排序的列表单元的data-id(可通过配置项中dataIdAttr修改)放入一个数组,并返回这个数组中
sort()
通过自定义列表单元的data-id的数组对列表单元进行排序
save()
destroy()
网友评论