vue中如何实现拖拽调整顺序功能
作者:树洞菇凉
这篇文章主要介绍了vue中如何实现拖拽调整顺序功能问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
vue实现拖拽调整顺序功能
使用vuedraggable是标准的组件式封装
或 vue-dragging 指令方式 实现拖拽调整顺序功能。
1:安装依赖
npm install vuedraggable
或
yarn add vuedraggable
2:使用全局注册 或者 哪个页面使用就引入哪个页面也可。
import vuedraggable from 'vuedraggable'
在使用时,可通过 v-model 来双向绑定本地 data,如果需要更新或者是触发父组件监听的事件,可以在 updated() 中去 emit。
引入后直接声明该组件然后使用即可,示例代码:
<template>
<vuedraggable class="wrapper" v-model="list">
<transition-group>
<div v-for="item in list" :key="item" class="item">{{item}}</div>
</transition-group>
</vuedraggable>
</template>
<script>
import vuedraggable from 'vuedraggable';
export default {
name: 'Index',
components: {
vuedraggable
},
props: {},
data() {
return {
list: [1,2,34,4,54,5]
}
},
updated() {
console.log(this.list)
},
methods: {
}
}
</script>
<style scoped lang="scss">
.wrapper {
display: flex;
justify-content: center;
width: 100%;
.item{
width: 300px;
height: 50px;
background-color: #42b983;
color: #ffffff;
}
}
</style>vue-dragging的npm包的名字是awe-dnd
并不是 vue-dragging,这个库的特点是封装了 v-dragging 全局指令,然后通过全局指令去数据绑定等。
与vuedraggable相比,awe-dnd没有双向绑定,因此提供了事件,在拖拽结束时用来更新列表 或 去触发父组件监听的事件。
1:安装依赖
npm install awe-dnd --save
或
yarn add awe-and
项目中main.js 文件
import VueDND from 'awe-dnd'
Vue.use(VueDND);
<template>
<div class="color-list">
<div
class="color-item"
v-for="color in colors" v-dragging="{ item: color, list: colors, group: 'color' }"
:key="color.text"
>{{color.text}}</div>
</div>
</template>
<script>
export default {
data () {
return {
colors: [{
text: "Aquamarine"
}, {
text: "Hotpink"
}, {
text: "Gold"
}, {
text: "Crimson"
}, {
text: "Blueviolet"
}, {
text: "Lightblue"
}, {
text: "Cornflowerblue"
}, {
text: "Skyblue"
}, {
text: "Burlywood"
}]
}
},
}
</script>可以发现绑定时 v-dragging="{ item: color, list: colors, group: 'color' }" 这种形式进行指令绑定,其中 item 就是单个对象,而 list 则是数据列表,group 则是用来声明一个组,来保证可以在一个页面中进行多个数据源的操作。
而提供的两个事件方法如下:
export default {
mounted () {
this.$dragging.$on('dragged', ({ value }) => {
console.log(value.item)
console.log(value.list)
console.log(value.otherData)
})
this.$dragging.$on('dragend', (res) => {
console.error(res);
})
}
}一般使用的方法就是:
this.$dragging.$on('dragend', (res) => {
console.error(res);
})vue拖拽排序功能(vuedraggable)
vuedraggable 中文文档: https://www.itxst.com/vue-draggable/tutorial.html
效果展示

实现步骤
1.安装依赖
npm install vuedraggable --save
2.组件中引入
import draggable from "vuedraggable";
components: {
draggable,
},3.组件中使用
<template>
<div>
<draggable
v-model="myArray"
group="people"
@change="change"
@start="start"
@end="end"
>
<div class="item" v-for="(itme, index) in myArray" :key="index">
{{ itme }}
</div>
</draggable>
</div>
</template>
<script>
import draggable from "vuedraggable";
export default {
components: {
draggable,
},
data() {
return {
myArray: ["行一", "行二", "行三"],
};
},
methods: {
// 监听拖拽
change(event) {
console.log("change");
console.log(event);
console.log(this.myArray);
},
// 开始拖拽
start(event) {
console.log("start");
console.log(event);
console.log(this.myArray);
},
// 结束拖拽
end(event) {
console.log("end");
// event.item 拖拽的本身
// event.to 拖拽的目标列表
// event.from 拖拽之前的列表
// event.oldIndex 拖拽前的位置
// event.newIndex 拖拽后的位置
console.log(event);
console.log(this.myArray);
},
},
};
</script>
<style>
.item {
border: 1px solid #bbb;
margin: 10px;
width: 100px;
padding: 5px;
}
</style>总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
