zoukankan      html  css  js  c++  java
  • vue拖拽排序插件vuedraggable的使用 附原生使用方法

    Vue中使用

    先下载依赖:

    npm install vuedraggable -S
    

      项目中引入

    import draggable from 'vuedraggable'

    注册

    components: {
        draggable
    },
    

      demo:

    <template>
        <draggable v-model="colors" @update="datadragEnd" :options = "{animation:500}">
                <transition-group>
                    <div v-for="element in colors" :key="element.text" class = "drag-item">
                        {{element.text}}
                    </div>
                </transition-group>
        </draggable>
    </template>
    
    <script>
        import draggable from 'vuedraggable'
        export default{
            data(){
                return{
                    msg:"这是测试组件",
                    colors: [
                        {
                            text: "Aquamarine",
                        }, 
                        {
                            text: "Hotpink",
                        }, 
                        {
                            text: "Gold",
                        }, 
                        {
                            text: "Crimson",
                        }, 
                        {
                            text: "Blueviolet",
                        },
                        {
                            text: "Lightblue",
                        }, 
                        {
                            text: "Cornflowerblue",
                        }, 
                        {
                            text: "Skyblue",
                        }, 
                        {
                            text: "Burlywood",
                        }
                    ],
                    startArr:[],
                    endArr:[],
                    count:0,
                }
            },
            components: {
              draggable
            },
            methods:{
                getdata (evt) {
                    console.log(evt.draggedContext.element.text)
                },
                datadragEnd (evt) {
                    evt.preventDefault();
                    console.log('拖动前的索引 :' + evt.oldIndex)
                    console.log('拖动后的索引 :' + evt.newIndex)
                    console.log(this.colors);
                }
            },
            mounted () {
    	        //为了防止火狐浏览器拖拽的时候以新标签打开,此代码真实有效
                document.body.ondrop = function (event) {
                    event.preventDefault();
                    event.stopPropagation();
                }
            }
        }
    </script>
    
    <style lang="scss" scoped>
        .test{
            border:1px solid #ccc;
        }
        .drag-item{
             200px;
            height: 50px;
            line-height: 50px;
            margin: auto;
            position: relative;
            background: #ddd;
            margin-top:20px;
        }
        .ghostClass{
            opacity: 1;
        }
        .bottom{
             200px;
            height: 50px;
            position: relative;
            background: blue;
            top:2px;
            left: 2px;
            transition: all .5s linear;
        }
    </style>
    

      

    原生方法使用

    <transition-group tag="div" class="container">
      <div class="item" v-for="(item,index) in items" :key="item.key" :style="{background:item.color,'80px',height:'80px'}"
        draggable="true"
      @dragstart="handleDragStart($event, item)"
        @dragover.prevent="handleDragOver($event, item)"
        @dragenter="handleDragEnter($event, item)"
        @dragend="handleDragEnd($event, item)" >
      </div>
    </transition-group>
    

      

    <script>
    export default {
     name: 'Toolbar',
     data () {
      return {
       items: [
        { key: 1, color: '#ffebcc'},
        { key: 2, color: '#ffb86c'},
        { key: 3, color: '#f01b2d'}
       ],
         
        dragging: null
      }
     },
     methods:{
      handleDragStart(e,item){
        this.dragging = item;
      },
      handleDragEnd(e,item){
        this.dragging = null
      },
      //首先把div变成可以放置的元素,即重写dragenter/dragover
      handleDragOver(e) {
        e.dataTransfer.dropEffect = 'move'// e.dataTransfer.dropEffect="move";//在dragenter中针对放置目标来设置!
      },
      handleDragEnter(e,item){
        e.dataTransfer.effectAllowed = "move"//为需要移动的元素设置dragstart事件
        if(item === this.dragging){
          return
        }
        const newItems = [...this.items]
        console.log(newItems)
        const src = newItems.indexOf(this.dragging)
        const dst = newItems.indexOf(item)
      
        newItems.splice(dst, 0, ...newItems.splice(src, 1))
      
        this.items = newItems
      }
     }
    }
    </script>
      
    <style scoped>
      .container{
         80px;
        height: 300px;
        position: absolute;
        left: 0;
        display:flex;
        flex-direction: column;
        padding: 0;
      }
      .item {
       margin-top: 10px;
       transition: all linear .3s
      }
    

      

  • 相关阅读:
    网络七层参考模型(OSI)
    TCP/IP体系结构
    VC调用外部程序接口
    处事八条
    HFC网络
    sql server 2005中的分区函数用法(partition by 字段) 
    Java实现的几个常用排序算法详细解读
    Java中读取字符文件类FileReader
    如何在Java中进行图片剪裁
    从零开始构建HTML 5 Web页面
  • 原文地址:https://www.cnblogs.com/hy96/p/12356698.html
Copyright © 2011-2022 走看看