zoukankan      html  css  js  c++  java
  • vuejs2.0使用Sortable.js实现的拖拽功能

    简介

    在使用vue1.x之前的版本的时候,页面中的拖拽功能,我在项目中是直接用的jquery ui中的sortable.js,只是在拖拽完成后,在update的回调函数中又重新排序了存放数据的数组。但是当把vue升级到2.0以上后发现拖拽功能失效了,于是使用了下面代码。

    该案例主要是在用于vuejs2.0中实现的拖拽功能,用到的的js有Sortable.js,vuedraggable.js,当然还有vue.min.js,提供的案例使用的require.js加载。

    实现效果

    实现后的效果如图所示:

    html主要代码

    <draggable :list="list2" :move="getdata" @update="datadragEnd" :options="{animation: 300,handle:'.dargDiv'}">
            <transition-group name="list-complete" >
                <div v-for="element in list2" :key="element.it.name"  class="list-complete-item">
                    <div class="styleclass dargDiv">{{element.id}}</div>
                    <div class="styleclass">{{element.it.name}}</div>
                </div>
            </transition-group>
        </draggable>

    css代码

     body{
        font-family:'微软雅黑'
    }
    [v-cloak]{
        display:none;
    }
    #example{
        width:1000px;
        margin:0 auto;
    }
    .list-complete-item {
      transition: all 1s;
        height:50px;
        line-height: 50px;
        background: #000;
        color:#fff;
        text-align: center;
        font-size:24px;
        margin-top:10px;
    }
    .styleclass{
        width:100px;
        float:left;
    }
    .list-complete-enter, .list-complete-leave-active {
      opacity: 0;
      height: 0px;
      margin-top: 0px;
      padding: 0px;
      border: solid 0px;
    }
    .list-complete-sortable-chosen,.list-complete-sortable-ghost{
     opacity: 0;
      height: 0px;
      margin-top: 0px;
      padding: 0px;
      border: solid 0px;
    }
    .dargDiv{
        cursor:move;
        background:red;
    }
    .wrods{
        margin-top:50px;
    }
    p{
        line-height:24px;
        text-align:center;
    }

    js代码

    require.config({
        urlArgs: "ver=1.0_0",
        
        paths:{
            "vue":'vue.min2',
            "sortablejs":'Sortable',
            "vuedraggable":'vuedraggable'    
        },
        shim:{
            'vue':{
                exports:'vue'
            } 
        }
    }),
    
    require(['vue','vuedraggable'],function(Vue,draggable){
        Vue.component('draggable', draggable);
         new Vue({
            el: '#example',
            data: {
               list2:[
               {id:"id1",it:{name:'bbbb'}},
               {id:"id2",it:{name:'2222'}},
               {id:"id3",it:{name:'3333'}},
               {id:"id4",it:{name:'4444'}}
               ]
            },
            methods:{
                getdata: function(evt){
                    console.log(evt.draggedContext.element.id);
                },
                datadragEnd:function(evt){
                    console.log('拖动前的索引:'+evt.oldIndex);
                    console.log('拖动后的索引:'+evt.newIndex);
                    
                }
                
            }
        })
        
    })

    里面的可配置的很多细节请参考参考地址,这里不做详细介绍。

    页面展示地址:https://hxlmqtily1314.github.io/Vue.Draggable-case/
    github地址:https://github.com/hxlmqtily1314/Vue.Draggable-case

    参考地址:https://github.com/SortableJS/Vue.Draggable

  • 相关阅读:
    Linux 环境下搭建单机版 Redis
    为什么要同时重写equals和hashcode方法
    使用ThreadPoolExecutor 创建线程池,完成并行操作
    一个简单的通过newFixedThreadPool实现多线程案例
    Java 获取对象的所有属性及其对应的值
    分布式id生成方案总结
    使用idea和gradle编译spring5源码
    Pandas中常用的函数使用
    单链表的反转 python实现实例
    kaggle注册中的坑---2018,12.3试过有效
  • 原文地址:https://www.cnblogs.com/moqiutao/p/6423754.html
Copyright © 2011-2022 走看看