拖拽排序组件Vue-Slicksort
vue
vuejs/vue: 是一个用于构建用户界面的 JavaScript 框架,具有简洁的语法和丰富的组件库,可以用于开发单页面应用程序和多页面应用程序。
项目地址:https://gitcode.com/gh_mirrors/vu/vue
免费下载资源
·
发现一个功能比较强大的自由拖拽排序组件VueSlicksort,分享一下
1. 安装
npm i vue-slicksort -S || yarn add vue-slicksort
2. 使用
效果图:
<div class="root1">
<SlickList
:lockToContainerEdges="true"
axis="x"
lockAxis="x"
v-model="items"
class="SortableList"
@input="getChangeLists"
>
<SlickItem
v-for="(item, index) in items"
class="SortableItem"
:index="index"
:key="index"
>
<div class="item-name">{{ item.name }}</div>
<div class="root2">
<SlickList
:lockToContainerEdges="true"
class="list"
lockAxis="y"
v-model="item.itemArr"
>
<SlickItem
class="list-item"
v-for="(item, index) in item.itemArr"
:index="index"
:key="index"
>
{{ item }}
</SlickItem>
</SlickList>
</div>
</SlickItem>
</SlickList>
</div>
import { SlickList, SlickItem } from 'vue-slicksort' // 引入
export default {
name: 'Example',
components: {
SlickItem,
SlickList
},
data() {
return {
flag: true,
items: [
{
name: 'Tab-1',
itemArr: ['1-1', '1-2', '1-3']
},
{
name: 'Tab-2',
itemArr: ['2-1', '2-2', '2-3']
},
{
name: 'Tab-3',
itemArr: ['3-1', '3-2', '3-3']
}
]
}
},
methods: {
getChangeLists(vals) {
console.log(vals, 'vals')
}
}
.root1 {
width: 800px;
display: flex;
height: 100%;
box-sizing: border-box;
flex-direction: column;
justify-content: center;
align-items: center;
border: 1px solid #efefef;
}
.root2 {
display: flex;
height: 100%;
}
.list {
max-height: 80vh;
margin: 0 auto;
padding: 0;
overflow: auto;
background-color: #f3f3f3;
border: 1px solid #efefef;
border-radius: 3;
}
.list-item {
display: flex;
align-items: center;
justify-content: center;
width: 200px;
padding: 20px;
background-color: #fff;
border-bottom: 1px solid #efefef;
box-sizing: border-box;
user-select: none;
color: #333;
font-weight: 400;
}
.stylizedHelper {
background: blue;
color: #fff;
}
.SortableList {
display: flex;
width: 606px;
white-space: nowrap;
max-height: 80vh;
margin: 0 auto;
padding: 0;
overflow: auto;
border-radius: 3;
}
.SortableItem {
display: flex;
align-items: center;
flex-direction: column;
width: 100%;
padding: 20px 0;
background-color: #fff;
border-bottom: 1px solid #efefef;
box-sizing: border-box;
user-select: none;
color: #333;
font-weight: 400;
}
.item-name {
background: #5eb685;
padding: 20px 0;
color: #fff;
width: 200px;
text-align: center;
}
3. 组件参数
名称 | 类型 | 默认值 | 说明 |
---|---|---|---|
value | Array | - | 列表的内容 |
axis | String | y | 列表元素可以被横向拖拽,纵向拖拽还是网格拖拽。用x,y,xy来表示 |
lockAxis | Array | - | 用于排序时在坐标系中锁定元素的移动 |
helperClass | String | - | helper的自定义样式类 |
transitionDuration | Number | 300 | 元素移动动画的持续时间 |
pressDelay | Number | 0 | 如果需要当元素被按下一段时间再允许拖拽,可以设置这个属性 |
pressThreshold | Number | 5 | 移动允许被忽略的阈值,单位是像素 |
distance | Number | 0 | 如果需要在拖拽出一定距离之后才被识别为正在拖拽的元素,可以设置这个属性 |
useDragHandle | Boolean | false | 如果使用HandleDirective,设置为true |
useWindowAsScrollContainer | Boolean | false | 是否设置window为可滚动的容器 |
hideSortableGhost | Boolean | true | 是否自动隐藏ghost元素 |
lockToContainerEdges | Boolean | false | 是否对正在拖拽的元素锁定容器边缘 |
lockOffset | String | 50% | 对正在拖拽的元素锁定容器边缘的偏移量 |
shouldCancelStart | Function | - | 在拖拽开始前这个方法将被调用 |
getHelperDimensions | Function | - | 可选方法({node, index, collection}),用于返回SortableHelper的计算尺寸 |
4. 事件
名称 | 参数 | 说明 |
---|---|---|
sortStart | event, node, index, collection | 当拖拽开始时触发 |
sortMove | event | 当拖拽时鼠标移动时触发 |
sortEnd | event, newIndex, oldIndex, collection | 当拖拽结束时触发 |
input | newList | 当拖拽结束后产生新的列表时触发 |
GitHub 加速计划 / vu / vue
207.54 K
33.66 K
下载
vuejs/vue: 是一个用于构建用户界面的 JavaScript 框架,具有简洁的语法和丰富的组件库,可以用于开发单页面应用程序和多页面应用程序。
最近提交(Master分支:2 个月前 )
73486cb5
* chore: fix link broken
Signed-off-by: snoppy <michaleli@foxmail.com>
* Update packages/template-compiler/README.md [skip ci]
---------
Signed-off-by: snoppy <michaleli@foxmail.com>
Co-authored-by: Eduardo San Martin Morote <posva@users.noreply.github.com> 4 个月前
e428d891
Updated Browser Compatibility reference. The previous currently returns HTTP 404. 5 个月前
更多推荐
已为社区贡献5条内容
所有评论(0)