<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
* {
padding: 0;
margin: 0;
list-style-type: none;
}
html,
body {
padding: 10px;
}
ul {
display: flex;
flex-wrap: wrap;
}
li {
width: 100px;
height: 100px;
border-radius: 50%;
line-height: 40px;
border: 1px solid black;
margin: 10px;
display: flex;
justify-content: center;
align-items: center;
transition: all 1s ease;
}
.bg {
background: pink;
}
</style>
</head>
<body>
<ul>
<li draggable="true">1</li>
<li draggable="true">2</li>
<li draggable="true">3</li>
<li draggable="true">4</li>
<li draggable="true">5</li>
<li draggable="true">6</li>
<li draggable="true">7</li>
<li draggable="true">8</li>
<li draggable="true">9</li>
<li draggable="true">10</li>
<li draggable="true">11</li>
<li draggable="true">12</li>
<li draggable="true">13</li>
<li draggable="true">14</li>
<li draggable="true">15</li>
<li draggable="true">16</li>
<li draggable="true">17</li>
<li draggable="true">18</li>
<li draggable="true">19</li>
<li draggable="true">20</li>
<li draggable="true">21</li>
<li draggable="true">22</li>
<li draggable="true">23</li>
<li draggable="true">24</li>
<li draggable="true">25</li>
<li draggable="true">26</li>
<li draggable="true">27</li>
<li draggable="true">28</li>
<li draggable="true">29</li>
<li draggable="true">30</li>
</ul>
<script>
function list(dom) {
let list = document.querySelectorAll(dom);
let Default = '';
for (let [key, val] of Object.entries(list)) {
val.addEventListener('dragstart', function (ev) {
Default = this;
this.setAttribute('class', 'bg')
})
val.addEventListener('dragover', function (ev) {
ev.preventDefault();
let agoNode = this.previousElementSibling;
let AfterNode = this.nextElementSibling
if (AfterNode == null) {
console.log(1)
this.parentNode.appendChild(Default)
} else if (Default == agoNode) {
console.log(2)
this.parentNode.insertBefore(this, Default)
} else if (Default != agoNode && Default != AfterNode) {
console.log(3)
this.parentNode.insertBefore(Default, AfterNode)
} else {
console.log(3)
this.parentNode.insertBefore(Default, this)
}
})
val.addEventListener('drop', function (ev) {
ev.preventDefault();
Default.removeAttribute('class', 'bg')
})
val.addEventListener('dragend', function (ev) {
Default.removeAttribute('class', 'bg')
})
}
}
list('li')
</script>
</body>
</html>