vue2.0拖拽排序js用dragstart、drop、dragover来实现

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style>
* {
padding: 0;
margin: 0;
}
.box {
width: 60%;
height: auto;
margin: 50px auto 0;

}
ul li {
position: relative;
padding: 10px 0;
border: 1px solid #000000;
text-align: center;
list-style: none;
}
</style>
</head>
<body>
<div id="app">
<div class="box">
<ul ref='parant'>
<li v-for="(item, index) in items" draggable='true' @dragstart='drag($event)' @drop='drop($event)' @dragover='allowDrop($event)'>
{{item.num}}--{{item.txt}}
</li>
</ul>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script>
<script>
var app = new Vue({
el: '#app',
data: {
items: [
{num: 1,txt:'内容1'},
{num: 2,txt:'内容2'},
{num: 3,txt:'内容3'},
{num: 4,txt:'内容4'},
{num: 5,txt:'内容5'},
{num: 6,txt:'内容6'}
],
moveDom: '',
changeDom: '',
startY: 0,
endY: 0,
},
mounted () {
},
methods: {
drag:function(event){ //start
//             console.log(event)
                                   this.moveDom = event.currentTarget
                                   this.startY = event.clientY
                },
                drop:function(event){ //end
                                  event.preventDefault();
                                  this.changeDom = event.currentTarget
                                  this.endY = event.clientY
    if (this.endY - this.startY >= 0) {
//     console.log('xia')
    this.$refs.parant.insertBefore(this.moveDom, this.changeDom.nextSibling)
      } else {
//     console.log('shang')
    this.$refs.parant.insertBefore(this.moveDom, this.changeDom)
    }
                },
                allowDrop:function(event){ //moving
                                   event.preventDefault()
                                  this.endY = event.clientY
                                  this.changeDom = event.currentTarget
                                  if (this.endY - this.startY >= 0) {
// console.log('xia')
this.$refs.parant.insertBefore(this.moveDom, this.changeDom.nextSibling)
} else {
// console.log('shang')
this.$refs.parant.insertBefore(this.moveDom, this.changeDom)
}
            }
}
})
</script>
</body>

</html>


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值