vue table表头拖放拖拽功能

2020-07-03  本文已影响0人  一只喵de旅行

网上找了很多方法,代码看的头疼,最后还是自己写了一套简单的方法。

HTML:

<table>

                <thead class="el-table__header-wrapper has-gutter">

                    <tr>

                        <th v-for="(columns, index) in tablesColumns" :key="index" draggable='true' @dragstart="dragstartEvent(index)" @dragenter="dragenterEvent($event,columns)" @dragend="dragendEvent($event,columns)">

                            <label class="cell">{{columns.name}}</label>

                        </th>

                    </tr>

                </thead>

                <tbody class="el-table__body">

                    <tr>

                        <td></td>

                    </tr>

                </tbody>

            </table>

JS:

tablesColumns:[{

                id:0,

                name:'债券代码'

            },{

                id:1,

                name:'买卖方向'

            },{

                id:2,

                name:'量(万元)'

            },{

                id:3,

                name:'收益率'

            }]

//拖动开始 --- 拿到当前目标对象的索引

        dragstartEvent(index) {

            this.dragStartIndex = index 

        },

        //拖动过程 --- 拿到结束后的对象

        dragenterEvent(ev, col) {

            this.dragEndColumn = col

        },

        //拖动结束

        dragendEvent(ev, col) {

            this.tablesColumns.splice(this.dragEndColumn.id,1,...this.tablesColumns.splice(this.dragStartIndex, 1 , this.tablesColumns[this.dragEndColumn.id])) // 这里用到了 数组对象的交换,id其实就是 索引下标

            for(let i=0;i<this.tablesColumns.length;i++){ // 重新把id 整理一遍

                this.tablesColumns[i].id = i

            }

        }

结束拖动 用数组对象交换,真的是很容易就写好了(百度上 查到的 都是 很多判断什么的,最后拖动还有问题,所以最后作者自己写了,测试下来很完美。哈哈哈)

最后效果图 :

上一篇下一篇

猜你喜欢

热点阅读