发现一个功能比较强大的自由拖拽排序组件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. 组件参数

名称类型默认值说明
valueArray-列表的内容
axisStringy列表元素可以被横向拖拽,纵向拖拽还是网格拖拽。用x,y,xy来表示
lockAxisArray-用于排序时在坐标系中锁定元素的移动
helperClassString-helper的自定义样式类
transitionDurationNumber300元素移动动画的持续时间
pressDelayNumber0如果需要当元素被按下一段时间再允许拖拽,可以设置这个属性
pressThresholdNumber5移动允许被忽略的阈值,单位是像素
distanceNumber0如果需要在拖拽出一定距离之后才被识别为正在拖拽的元素,可以设置这个属性
useDragHandleBooleanfalse如果使用HandleDirective,设置为true
useWindowAsScrollContainerBooleanfalse是否设置window为可滚动的容器
hideSortableGhostBooleantrue是否自动隐藏ghost元素
lockToContainerEdgesBooleanfalse是否对正在拖拽的元素锁定容器边缘
lockOffsetString50%对正在拖拽的元素锁定容器边缘的偏移量
shouldCancelStartFunction-在拖拽开始前这个方法将被调用
getHelperDimensionsFunction-可选方法({node, index, collection}),用于返回SortableHelper的计算尺寸

4. 事件

名称参数说明
sortStartevent, node, index, collection当拖拽开始时触发
sortMoveevent当拖拽时鼠标移动时触发
sortEndevent, newIndex, oldIndex, collection当拖拽结束时触发
inputnewList当拖拽结束后产生新的列表时触发
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 个月前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐