使用vuedraggable 实现元素的左右拖拽

1.  安装插件

npm install vuedraggable

2. 引入

import draggable from 'vuedraggable'

3. 注册

components:{draggable }

官方文档地址:vue.draggable中文文档 - itxst.com

实现多列拖拽(左右拖拽)关键点:group属性  group  

vue.draggable两列或多列之间相互拖动 - itxst.com

 

两列组件设置相同的group名就可以相互拖拽了


<draggable v-model="arr1" group="site">
    <transition-group>
     <div class="item" v-for="item in arr1" :key="item.id">{{item.name}}</div>
    </transition-group>
</draggable>

//group属性:
//设置方式一,直接设置组名
group:'itxst'
//设置方式,object,也可以通过自定义函数function实现复杂的逻辑
group:{
    name:'itxst',//组名为itxst
    pull:true|false|function,//是否允许拖入当前组
    put:true|false|function,//是否允许拖出当前组
}

完整代码:

<template>
  <div> 
<!--使用draggable组件-->
<div class="itxst">
<div class="col">
  <div class="title" >把下面元素拖拽到B组试试看</div>
 <draggable v-model="arr1" :group="groupA"  animation="300" dragClass="dragClass"  ghostClass="ghostClass" chosenClass="chosenClass" @start="onStart" @end="onEnd">
    <transition-group :style="style">
     <div class="item" v-for="item in arr1" :key="item.id">{{item.name}}</div>
    </transition-group>
</draggable> 
 </div>
 <div  class="col">
    <div class="title" >B组(本组是个空数组)</div>
 <draggable v-model="arr2" :group="groupB" animation="300" dragClass="dragClass"  ghostClass="ghostClass" chosenClass="chosenClass" @start="onStart" @end="onEnd">
    <transition-group :style="style">
     <div class="item" v-for="item in arr2" :key="item.id">{{item.name}}</div>
    </transition-group>
</draggable> 
 </div>
  </div>
  </div>
</template>
<script>
//导入draggable组件
import draggable from 'vuedraggable'
export default {
  //注册draggable组件
  components: {
            draggable,
        },
  data() {
    return {
      drag:false,
      groupA:{
        name:'site',
        pull:true, //可以拖从
        put:true//可以拖出
      },
       groupB:{
        name:'site',
        pull:true,
        put:true
      },
      //定义要被拖拽对象的数组
      arr1:[
        {id:1,name:'www.itxst.com'},
        {id:2,name:'www.jd.com'},
        {id:3,name:'www.baidu.com'},
        {id:3,name:'www.taobao.com'}
        ],
        arr2:[], //空数组
        //空数组之在的样式,设置了这个样式才能拖入
        style:'min-height:120px;display: block;'
    };
  },
  methods: {
     //开始拖拽事件
      onStart(){
        this.drag=true;
      },
      //拖拽结束事件
       onEnd() {
       this.drag=false;
    },
  },
};
</script>
<style scoped>
/*定义要拖拽元素的样式*/
.ghostClass{
  background-color:  blue !important;
}
.chosenClass{
  background-color: red !important;
  opacity: 1!important;
}
.dragClass{
  background-color: blueviolet !important;
  opacity: 1 !important;
  box-shadow:none !important;
  outline:none !important;
  background-image:none !important;
}
.itxst{
  margin: 10px;
 
}
.title{
  padding: 6px 12px;
}
.col{
  width: 40%;
  flex: 1;
  padding: 10px;
  border: solid 1px #eee;
  border-radius:5px ;
  float: left;
}
.col+.col{
 margin-left: 10px;
}

.item{
  padding: 6px 12px;
  margin: 0px 10px 0px 10px;
  border:  solid 1px #eee;
   background-color: #f1f1f1;
}
.item:hover{
  background-color: #fdfdfd;
  cursor: move;
}
.item+.item{
  border-top:none ;
  margin-top: 6px;
}
</style>

常用的一些属性

 事件

 详情参考:https://www.jb51.net/article/260748.htm

vuedraggable是一个Vue.js组件,它基于Sortable.js实现了拖放功能,可以轻松地实现拖放排序、拖拽复制、拖放组合和拖放嵌套等功能。下面是实现三列拖拽的示例代码: ```html <template> <div class="container"> <div class="column"> <h3>Column 1</h3> <draggable v-model="list1" :options="{group:{name:'people', pull:'clone', put:false}}"> <div v-for="item in list1" :key="item.id">{{ item.name }}</div> </draggable> </div> <div class="column"> <h3>Column 2</h3> <draggable v-model="list2" :options="{group:{name:'people', pull:false}}"> <div v-for="item in list2" :key="item.id">{{ item.name }}</div> </draggable> </div> <div class="column"> <h3>Column 3</h3> <draggable v-model="list3" :options="{group:{name:'people', pull:false}}"> <div v-for="item in list3" :key="item.id">{{ item.name }}</div> </draggable> </div> </div> </template> <script> import draggable from 'vuedraggable'; export default { components: { draggable }, data() { return { list1: [ {id: 1, name: 'Alice'}, {id: 2, name: 'Bob'}, {id: 3, name: 'Charlie'} ], list2: [], list3: [] } } } </script> <style scoped> .container { display: flex; } .column { flex: 1; margin-right: 20px; } </style> ``` 在这个示例中,我们使用了三个div来表示三列,每一列都包含一个vuedraggable组件实现拖放排序的功能。第一列的选项可以被拖拽到其他两列,而其他两列的选项不能被拖拽到其他列中。通过设置不同的group属性值,可以实现不同的拖放组合方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值