vue实现拖拽排序功能,单层嵌套,多层嵌套

前言:

        因为项目需要需要弄一个拖拽排序的效果,在这里使用的是vue的 awe-dnd 实现的效果

官网入口:https://github.com/hilongjw/vue-dragging

单层嵌套:

效果图:

实行步骤:

步骤一:安装插件

 cnpm install awe-dnd --save 或者 npm install awe-dnd --save

步骤二:在main.js中配置

//引入拖拽排序插件
import VueDND from 'awe-dnd'

Vue.use(VueDND)

步骤三:在页面上使用

在你的li里面加上这句话:

v-dragging="{ list: knowGroup, item: item, group: 'knowTab' }"

解释:

{ list:你列表的数据,     item: 是当前循环值 , group:你唯一的键,注意一个里面只有一个}

<ul class="tab_list">
              <li :class="{'active':nav_active == index}"
                  v-for="(item,index) in knowGroup"
                  :key="index"
                  @click="changeArticleType(item,index)"
                  v-dragging="{ list: knowGroup, item: item, group: 'knowTab' }">
                <div class="tab_list_left">
                  <p>{{item.name}}</p>
                  <p>{{item.score}}分</p>
                </div>
                <div class="tab_list_right">
                    <a-icon type="edit" style="color:#0B99AD;" @click="operateFun('editPersonGroup', item)" />
                    <span>|</span>
                    <a-icon type="delete" style="color:#0B99AD;" @click="operateFun('delPersonGroup', item)" />
                </div>
              </li>
            </ul>

js中写上他的监听事件,在console.log里面或者用debugger可以看到他的value

mounted() {
    this.$dragging.$on('dragged', (value) => {
      //因为我这在排序的时候不需要做处理,所以空着就行
      debugger
    })

  },

多层嵌套:(推荐其他多层嵌套链接:https://blog.csdn.net/qq_41619796/article/details/116027212

效果图:(1,点击第一层的,第一天,第二天,第三天可以换大的顺序,再第二层里面拖拽他本天的内容,是可以的,比如第一天内的数据可以拖拽换顺序)

实行步骤:

步骤一:安装插件

 cnpm install awe-dnd --save 或者 npm install awe-dnd --save

步骤二:在main.js中配置

//引入拖拽排序插件
import VueDND from 'awe-dnd'

Vue.use(VueDND)

步骤三:在页面上使用,源码

<template>
  <ul class="person-list">
    <li
      style="background: #9ee39a;margin-bottom:10px;border:1px solid red;"
      v-for="(item,index) in person"
      :key="'oneItem'+index"
      v-dragging="{ item: item, list: person, group: 'personInfo' }"
    >
      {{ item.name }}
      <ul>
        <li
          v-for="(twoItem,i) in item.children"
          :key="'twoItem'+i"
          v-dragging="{ item: twoItem, list: item.children, group: item.name }">
          {{ twoItem.name }}
        </li>
      </ul>
    </li>
  </ul>
</template>

<script>
export default {
  data() {
    return {
      person: [
        {
          name: '第一天',
          children: [
            {
              name: '1---111'
            },
            {
              name: '1---222'
            }
          ]
        }, {
          name: '第二天',
          children: [
            {
              name: '2---111'
            },
            {
              name: '2---222'
            }
          ]
        }, {
          name: '第三天',
          children: [
            {
              name: '3---111'
            },
            {
              name: '3---222'
            }
          ]
        }
      ]
    }
  },
  mounted() {
    this.$dragging.$on('dragged', (res) => {
      // ...
    })
    this.$dragging.$on('dragend', () => {
      // ...
    })
  }
}
</script>
<style lang="scss" scoped>
  .person-list{
    margin-top:200px;
    width:500px;
    height:500px;
  }
</style>

其他功能待研究

更多功能入口:http://www.360doc.com/content/20/1230/08/29701314_954313386.shtml

  • 5
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浩星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值