- npm 下载:
npm install sortablejs --save
- 引入:
import Sortable from "sortablejs";
- 创建实例
Sortable.create(节点,{配置对象})
- 常用属性及方法应用
<template>
<div>
<!-- 单个列表拖拽 -->
<h3>单个列表拖拽</h3>
<ul ref="e1">
<li
v-for="n in list"
:dataIdAttr="n.index"
:key="n.index"
:class="n.index==0?'disabled':'canMove'"
>
<span class="move">Touch</span>
{{n.name}}
</li>
</ul>
<!-- 多个列表拖拽 -->
<h3>多个列表拖拽</h3>
<div style="width:600px;display:flex;justify-content: space-between;">
<ul ref="e2">
<li v-for="n in 5" :key="n" v-text="'b' + n"></li>
</ul>
<ul ref="e3">
<li v-for="n in 5" :key="n" v-text="'c' + n"></li>
</ul>
</div>
</div>
</template>
<script>
import Sortable from "sortablejs";
export default {
data() {
return {
list: [
{ index: 0, name: "a-0" },
{ index: 1, name: "a-1" },
{ index: 2, name: "a-2" },
{ index: 3, name: "a-3" },
{ index: 4, name: "a-4" },
],
};
},
methods: {
sortable_1() {
const el = this.$refs.e1;
let sortable = Sortable.create(el, {
animation: 150,
delay: 1000,
delayOnTouchOnly: true,
handle: ".move",
filter: ".disabled",
draggable: ".canMove",
dataIdAttr: "dataIdAttr",
dragClass: "dragClass",
ghostClass: "ghostClass",
chosenClass: "chosenClass",
onChoose: (e) => {
console.log("选中");
},
onUnchoose: (e) => {
console.log("取消选中");
},
onStart: (e) => {
console.log("开始拖动");
},
onEnd: (e) => {
console.log("结束拖动", sortable.toArray());
},
});
},
sortable_2() {
const e2 = this.$refs.e2;
const e3 = this.$refs.e3;
Sortable.create(e2, {
animation: 150,
group: {
name: "groupName",
pull: "clone",
put: () => {
return true;
},
},
sort: true,
filter: (e, node) => {
return false;
},
onAdd: (e) => {
console.log("新增元素");
},
onUpdate: (e) => {
console.log("位置更新--onUpdate_1");
},
onSort: (e) => {
console.log("位置更新--onSort_1");
},
onRemove: (e) => {
console.log("移除元素");
},
onMove: (e, mousePosition) => {
console.log("拖拽过程中");
},
onChange: (e) => {
console.log("拖拽位置改变--onChange_1");
},
onClone: (e) => {
console.log("克隆");
},
});
Sortable.create(e3, {
animation: 150,
group: "groupName",
onUpdate: (e) => {
console.log("位置更新--onUpdate_2");
},
onSort: (e) => {
console.log("位置更新--onSort_2");
},
onChange: (e) => {
console.log("拖拽位置改变--onChange_2");
},
});
},
},
computed: {},
mounted() {
this.sortable_1();
this.sortable_2();
},
components: {},
};
</script>
<style lang='scss' scoped>
ul {
width: 300px;
li {
cursor: pointer;
line-height: 40px;
border: 1px solid #ccc;
}
}
.ghostClass {
background: blue;
color: #fff;
}
.dragClass {
background: red;
color: #fff;
}
.chosenClass {
border-color: green;
}
</style>