0%

vue.draggable拖拽插件

vue.draggable.next是一款Vue3支持拖放的插件,并且拖放完后会与数据自动同步

1
2
// github官方地址
https://github.com/SortableJS/vue.draggable.next

image.png

特点

  • 基于 Sortable.js 封装
  • 完全支持PC端和移动端
  • 支持不同列表之间的拖放
  • 没有 jQuery 依赖
  • 列表变化和数据同步
  • 兼容 Vue.js 3.0
  • 支持取消动作
  • 各种监听事件提供

安装

1
npm i -S vuedraggable@next

使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// v-model是一个数组
// item就是数组的其中一项
// item-key唯一性,一般为子项其中的一个唯一属性
// @start开始拖动事件
// @end结束拖动事件
<draggable
v-model="myArray"
@start="drag=true"
@end="drag=false"
item-key="id">
<template #item="{element}">
<div>{{element.name}}</div>
</template>
</draggable>
1
2
3
4
5
6
7
8
9
10
<draggable
element="div"
:list="list"
v-bind="{group:'title', animation:150}"
:no-transition-on-drag="true"
>
<transition-group type="transition" :css="true">
<p class="list" v-for="item in list" :key="item.id">{{item.name}}</p>
</transition-group>
</draggable>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import draggable from 'vuedraggable'

export default {
components: {
draggable,
},
data() {
return {
myArray:[
{
"id":1,
"name:"张三"
},
{
"id":2,
"name:"李四"
},
{
"id":3,
"name:"王五"
}
]
drag: false,
}
},
}

如果你想要动画效果的话,加上一个tag属性,值为transition-group,component-data为过渡的名字

1
2
3
4
5
6
7
8
9
10
<draggable
v-model="myArray"
tag="transition-group"
:component-data="{ name: 'fade' }"
item-key="id"
>
<template #item="{ element }">
<div>{{ element.name }}</div>
</template>
</draggable>
属性名称 说明
group 如果一个页面有多个拖拽区域,通过设置group名称可以实现多个区域之间相互拖拽 ,同一名称的group之间可以互相拖拽,或者 { name: “…”, pull: [true, false, ‘clone’, array , function], put: [true, false, array , function] }
sort 是否开启排序,如果设置为false,它所在组可拖动但是无法排序
delay 鼠标按下多少秒之后可以拖拽元素
touchStartThreshold 鼠标按下移动多少px才能拖动元素
disabled :disabled= “true”,是否启用拖拽组件
animation 拖动时的动画效果,如设置animation=1000表示1秒过渡动画效果
handle :handle=“.mover” 只有当鼠标在class为mover类的元素上才能触发拖到事件
filter :filter=“.unmover” 设置了unmover样式的元素不允许拖动
draggable :draggable=“.item” 样式类为item的元素才能被拖动
ghost-class :ghost-class=“ghostClass” 设置拖动元素的占位符类名,你的自定义样式可能需要加!important才能生效,并把forceFallback属性设置成true
chosen-class :ghost-class=“hostClass” 被选中目标的样式,你的自定义样式可能需要加!important才能生效,并把forceFallback属性设置成true
drag-class :drag-class=”dragClass”拖动元素的样式,你的自定义样式可能需要加!important才能生效,并把forceFallback属性设置成true
force-fallback 默认false,忽略HTML5的拖拽行为,因为h5里有个属性也是可以拖动,你要自定义ghostClass chosenClass dragClass样式时,建议forceFallback设置为true
fallback-class 默认false,克隆选中元素的样式到跟随鼠标的样式
fallback-on-body 默认false,克隆的元素添加到文档的body中
fallback-tolerance 按下鼠标移动多少个像素才能拖动元素,:fallback-tolerance=“8”
scroll 默认true,有滚动区域是否允许拖拽
scroll-fn 滚动回调函数
scroll-fensitivity 距离滚动区域多远时,滚动滚动条
scroll-speed 滚动速度
move 当拖动元素经过另一个元素触发,可获取当前元素数据draggedContext.element,以及当前元素原来的位置futureIndex,和移动后的index,不返回或者返回true代表可拖动,返回false不可拖动,可以用来设置某个元素不可被拖动元素替换
属性名称 说明
@move 当拖动元素经过另一个元素触发
@change 元素位置改变后触发,可获取当前元素数据moved.element,以及当前元素原来的位置oldIndex,和移动后的newIndex
@start 开始移动事件
@end 结束移动事件
-------------本文结束感谢您的阅读-------------