zoukankan      html  css  js  c++  java
  • 列拖拽顺序调整-sortable.js使用

           最近在做一个单表统计功能,涉及到一个查询列配置,但是查询出来的列顺序,可以进行配置,通过写列的排序当然阔以,但是方法就不美丽了。所以,在网上搜了一下拖拽的组件,最终定位Sortable.js,简单易用。

    github地址:https://github.com/wuzhiaite/vue-samples

    1.引入Sortable.js

    Sortable.js的官网地址:http://www.sortablejs.com/

    github地址:https://github.com/SortableJS/Sortable/blob/master/tests/handles.html

    因为我是PHP上写vue, SO,只能用原始的script引入;当然Storable也提供了npm安装的方法;

    $ npm install sortablejs --save
    OR
    <script src="https://cdnjs.cloudflare.com/ajax/libs/Sortable/1.8.3/Sortable.min.js"></script>
    

    2.使用

    在开始写拖动的代码之前有几点要注意的:

       1.一般使用,<ul><li></li></ul>这种标签组合,所以传统的<table></table>要调整成 ul 和 li 组合的这种形式;

       2.就vue项目来说,Sortable实例需要在mounted方法中初始化

       3.拖动后,原先的数组的数据顺序是不会随着改变的,所以要自己手动操作,改变数组中的顺序;当然,Sortable也提供了相关的API,进官网康康,so easy !!!

        API地址:http://www.sortablejs.com/options.html

    样例:

    移动之前:

     移动之后:

     下面的两个按照顺序向上移动。

    样例代码如下: 

    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>手动拖动列表调整位置</title>
    <style type="text/css">
    </style>
    </head>
    <body>
     <div id="app">
        <div class="table-head table-croll">
            <ul class="croll" style="cursor:Default;">
                <li>姓名</li>
                <li>爱好</li>
                <li>年龄</li>
                <li>以及等等</li>
                
            </ul>
        </div>
        <div id="items" class="table-croll">
            <ul  v-for="(item,index) in list" class="croll">
                <li>
                    {{item.name}}
                </li>
                <li>
                    {{item.love}}
                </li>
                <li>
                    {{item.age}}
                </li>
                <li>
                    {{item.wait}}
                </li>
            </ul>
        </div>
    </div>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/Sortable/1.8.3/Sortable.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
    var app = new Vue({
        el:"#app",
        data:function(){
            return {
                list:[],
                sortable:{}
            }
        },
        created(){
            this.loadData();
        },
        mounted(){
            var that = this;
            var el = document.getElementById('items');
            this.sortable = Sortable.create(el,{//移动后的操作
                onEnd: function (/**Event*/evt) {
                    let itemEl = evt.item;  // dragged HTMLElement
                    let oldIndex = evt.oldIndex;
                    let newIndex = evt.newIndex;
                    let temp = that.list[oldIndex];
                    if( oldIndex < newIndex ){//向下移动调整顺序
                        for(var i = oldIndex ; i < newIndex ; i++){
                            that.list[i] = that.list[i+1];
                        }
                    }else if( oldIndex > newIndex ){//向上移动时调整顺序
                        for(var i = oldIndex ; i > newIndex ; i--){
                            that.list[i] = that.list[i-1];
                        }
                    }
    
                    that.list[newIndex] = temp;
                    console.log(that.list);
                },
            });    
        },
        methods:{
            loadData(){
                this.list = [
                    {
                        name:'zhangsan',
                        love:'ball',
                        age:11,
                        wait:'我就是等等'
                    },
                    {
                        name:'lisi',
                        love:'bigball',
                        age:11,
                        wait:'我就是等等'
                    },
                    {
                        name:'wangwu',
                        love:'bigbigball',
                        age:11,
                        wait:'我就是等等'
                    },
                    {
                        name:'lily',
                        love:'smallball',
                        age:11,
                        wait:'我就是等等'
                    }
                ];    
            }
        }
    })
    </script>
    <style>
     .table-head{
            background-color: #EEF4FF;
            color: #333333;
            font-weight: normal;
            font-size: 13px;
            font-family: '微软雅黑';
            border: none;
            padding: 12px 15px;
            text-align:left !important;
        }
        .table-croll{
            display:table;
            padding:0px;
            width:100%;
        }
        .croll {
            display:table-row;
            list-style: none;
            height: 55px;
            width:100%;
            border-top: 0px;
            font-size: 13px;
            color: #333333;
            cursor:move;
            margin-block-start: 0em;
            margin-block-end: 0em;
            margin-inline-start: 0px;
            margin-inline-end: 0px;
            padding-inline-start: 0px;
            line-height:50px;
            text-align:left ! important;
        }
        .croll li {
            display:table-cell ;
            float: left;
            width:20%;
            text-indent: 2em;
            list-style-type:none;
            height:50px;
            padding-left:5px;
            overflow:hidden;
            white-space:nowrap;
            vertical-align: middle;
        }
        .croll:nth-of-type(even){ background:#f0f3f6;}
    
    
    </style>
    </body>
    
    </html>

    至此,一个简单的拖动换行的功能就实现了,Sortable.js的功能还是很强大的,具体的使用可以翻翻相关的API

  • 相关阅读:
    451. Sort Characters By Frequency
    424. Longest Repeating Character Replacement
    68. Text Justification
    44. Wildcard Matching
    160. Intersection of Two Linked Lists
    24. Swap Nodes in Pairs
    93. 递归实现组合型枚举
    98. 分形之城
    97. 约数之和
    96. 奇怪的汉诺塔
  • 原文地址:https://www.cnblogs.com/perferect/p/12753939.html
Copyright © 2011-2022 走看看