vue.draggable中文文档

vue.draggable的clone拷贝实现常用菜单功能

vue.draggable的clone拷贝实现常用菜单功能,从一个拖拽组拖动到另外一个组而原来的那种组的元素不移除。

先看例子

从左边的元素拖动到右边试试看,然后再从右边拖回到左边。

例子

相关属性

属性说明
clone:options="{group:{name: 'itxst',pull:'clone'},sort: true}"
group属性的clone表示允许克隆被拖动的元素>
movemove事件用来控制那个元素不允许被拖拽和获取当前拖动元素的对象
endend拖拽结束事件,用来判断是否已经存在对象

完整代码

<template>
  <div> 
<!--使用draggable组件-->
<div class="itxst">
<div style="padding-left:6px">clone例子,左边往右边拖动试试看</div>
<div class="col">
 <draggable v-model="arr1"   @end="end1" :options="{group:{name: 'itxst',pull:'clone'},sort: true}"  animation="300"  :move="onMove">
    <transition-group>
     <div :class="item.id==1?'item forbid':'item'" v-for="item in arr1" :key="item.id">{{item.name}}</div>
    </transition-group>
</draggable> 
 </div>
 <div class="col">
 <draggable v-model="arr2"   @end="end2" group="itxst"  animation="300" :move="onMove">
    <transition-group>
     <div :class="item.id==12?'item2 forbid':'item2'" 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 {  
      //定义要被拖拽对象的数组
      arr1:[
            { id: 1, name: 'www.itxst.com(不允许停靠)' },
            { id: 2, name: 'www.jd.com' },
            { id: 3, name: 'www.baidu.com' },
            { id: 5, name: 'www.google.com' },
            { id: 4, name: 'www.taobao.com(不允许拖拽)' }
        ],
        arr2:[
            { id: 11, name: '常用菜单' }, 
        ],
        moveId:-1
    };
  },
  methods: {  
        //左边往右边拖动时的事件
       end1(e){
         console.log(e)
         var that=this;
         var  items=this.arr2.filter(function(m){
           return  m.id==that.moveId
        })
        //如果左边
        if(items.length<2) return;
        this.arr2.splice(e.newDraggableIndex, 1)
       },
      //右边往左边拖动时的事件
       end2(e){
         console.log(e)
         var that=this;
         var  items=this.arr1.filter(function(m){
           return  m.id==that.moveId
        })
        //如果左边
        if(items.length<2) return;
        this.arr1.splice(e.newDraggableIndex, 1)
       },
      //move回调方法
       onMove(e,originalEvent){
         this.moveId=e.relatedContext.element.id;
         //不允许停靠
         if (e.relatedContext.element.id == 1) return false;
         //不允许拖拽
         if (e.draggedContext.element.id == 4) return false;
         if (e.draggedContext.element.id == 11) return false;
         return true;
      },  
  },
};
Array.prototype.filter = Array.prototype.filter || function(func) {
var arr = this;
var r = [];
for (var i = 0; i < arr.length; i++) {
if (func(arr[i],i,arr)) {
r.push(arr[i]);
}
}
return r;
}
</script>
<style scoped> 
      .itxst {
          margin: 10px;
           text-align :left;
      }
      .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;
          text-align: left;
      }
      .item + .item {
          border-top: none;
          margin-top: 6px;
      }

      .item:hover {
          background-color: #fdfdfd;
          cursor: move;
      }
      .item2 {
          padding: 6px 12px;
          margin: 0px 10px 0px 10px;
          border: solid 1px #eee;
          background-color: pink;
          text-align: left;
      }
      .item2 + .item2 {
          border-top: none;
          margin-top: 6px;
      }

      .item2:hover {
           outline: solid 1px #ddd;
          cursor: move;
      }
</style>
Catalog
快速入门 js 版本 vue3 版本 常用例子 vue.draggable 单列拖拽 vue.draggable 表格拖动 vue.draggable 多列拖动 属性列表 group 拖拽分组 delay 响应时间 disabled 启用禁用 scroll 是否允许滚动 animation 过渡效果 handle 可拖动元素 filter 排除元素 chosenClass 选中样式 ghostClass 位符样式 clone 拷贝拖拽 事件列表 全部事件列表 move 自定义控制 add 拖拽完成事件 start 开始拖动