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
}
}
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
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;
height: 40px;
line-height: 40px;
text-align: center;
display: inline-block;
margin: 10px;
}
注:由于个人需要,前3列固定不能拖动,所以要做个小判断