vue使用vue-slicksort实现拖动排序

1,安装vue-slicksort

vue-slicksort官网地址
npm install vue-slicksort

2,在需要的页面引入

import {SlickItem, SlickList} from "vue-slicksort";

3,使用

<SlickList
          :lockToContainerEdges="true"
          axis="x"
          lockAxis="x"
          v-model="tableData"
          class="SortableList"
          @input="getChangeLists"
      >
        <SlickItem
            v-for="(item, index) in tableData"
            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.mainList"
                @input="getChange"
            >
              <SlickItem
                  class="list-item"
                  v-for="(item, index) in item.mainList"
                  :index="index"
                  :key="index"
              >
                {{ item }}
              </SlickItem>
            </SlickList>
          </div>
        </SlickItem>
      </SlickList>
components: {
    SlickItem,
    SlickList
  },
   data() {
    return {
      tableData: [
        {
          name: 'XXX',
          mainList: ['XXX', 'XXX', 'XXX']
        },
        {
          name: 'XXX',
          mainList: ['XXX', 'XXX', 'XXX']
        },
        {
          name: 'XXX',
          mainList: ['XXX', 'XXX', 'XXX']
        },
        {
          name: 'XXX',
          mainList: ['XXX', 'XXX', 'XXX']
        },
        {
           name: 'XXX',
          mainList: ['XXX', 'XXX', 'XXX']
        }
      ],
    }
  },
css:
<style lang="less">
//rem是移动端适配,使用时将根字体设为16px
.root1 {
  width: 87.4rem;
  height: 38rem;
  box-shadow: 0 4px 11px 0 rgba(23, 67, 91, 0.1);
  border-radius: .8rem;
  background: white;
  margin-top: 2rem;
  position: relative;
  padding: 6rem 3.5rem 3rem;
  overflow-y: hidden;
  overflow-x: scroll;
}

.root2 {
  display: flex;
}

.list {
  margin: 0 auto;
  padding: 0;
  overflow: auto;
  border-radius: 3px;
}

.list-item {
  width: 10.8rem;
  height: 3rem;
  border-radius: .4rem;
  border: 1px solid #1885F2;
  font-size: 1.6rem;
  font-family: SourceHanSansCN-Regular, serif;
  font-weight: 400;
  color: #1885F2;
  display: flex;
  align-items: center;
  justify-content: center;
  text-align: justify;
  padding: .5rem;
  margin-top: 1.2rem;
}

.SortableList {
  display: flex;
  white-space: nowrap;
  z-index: 99;
}

.SortableItem {
  display: flex;
  align-items: center;
  flex-direction: column;
  box-sizing: border-box;
  user-select: none;
  color: #333;
  font-weight: 400;
  margin-left: 3rem;
  z-index: 1;

  &:first-child {
    margin-left: 0;
  }
}

.item-name {
  width: 11rem;
  height: 3.2rem;
  background: #1885F2;
  border-radius: .4rem;
  font-size: 1.6rem;
  font-family: SourceHanSansCN-Bold, serif;
  font-weight: bold;
  color: #FFFFFF;
  padding: .5rem;
  display: flex;
  align-items: center;
  justify-content: center;
}

.dashed {
  width: 82.8rem;
  border: 1px dashed #1885F2;
  position: absolute;
  top: 8rem;
}
</style>

4,效果

在这里插入图片描述

5,移动端使用会有报错

在这里插入图片描述
就在全局添加

* {
  padding: 0;
  margin: 0;
  /*解决移动端报错*/
  touch-action: none;
}
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值