基于Vue快速实现列表拖拽排序

参考

在这里插入图片描述

html

<div class="drag_box">
                <!-- <div class="each" v-for="(item,index) in sortList" class="area" :key="index" draggable="true">
                    {{item.name}}</div> -->
                <ul class="drag_list">
                    <li @dragenter="dragenter($event, index)" @dragover="dragover($event, index)"
                        @dragstart="dragstart(index)" draggable v-for="(item, index) in tableHeader" :key="index"
                        class="list-item">
                        {{item.column_comment}}
                    </li>
                </ul>
            </div>

data

return {
                    sortList: [], //记录打开拖拽框前的顺序,点击取消时赋值
                    dragIndex: '',
                    enterIndex: '',
                    }

methods

dragstart(index) {
                    this.dragIndex = index;
                },
                dragenter(e, index) {
                    console.log(index, 'index')
                    e.preventDefault();
                    let fixed = 0
                    for (let num = 0; num < this.tableHeader.length; num++) {
                        if(this.tableHeader[num].fixed ==true){
                            fixed+=1
                        }
                    }
                    // 避免源对象触发自身的dragenter事件
                    if (this.dragIndex !== index) {
                        //前几列固定 无法拖拽
                        if (index >= fixed) {
                            const source = this.tableHeader[this.dragIndex];
                            this.tableHeader.splice(this.dragIndex, 1);
                            this.tableHeader.splice(index, 0, source);
                            // 排序变化后目标对象的索引变成源对象的索引
                            this.dragIndex = index;
                        }

                    }

                },
                dragover(e, index) {
                    e.preventDefault();
                },
                showDrag() {
                    this.dialogDrag = true
                    // this.sortList = this
                    Object.assign(this.sortList, this.tableHeader)
                },
                dialogDragCancel() {
                    this.tableHeader = this.sortList
                    this.dialogDrag = false
                },
                dragSubmit() {
                    console.log(this.tableHeader, '记录排序数组')
                    this.tableHeader = this.tableHeader
                    this.dialogDrag = false
                },

样式

    .drag_list {
        list-style: none;
    }

    .drag_list .list-item {
        cursor: move;
        width: 100px;
        background: #EA6E59;
        border-radius: 4px;
        color: #FFF;
        /* margin-bottom: 6px; */
        height: 40px;
        line-height: 40px;
        text-align: center;
        display: inline-block;
        margin: 10px;
    }

注:由于个人需要,前3列固定不能拖动,所以要做个小判断

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值