Skip to content

Commit e4e628d

Browse files
committed
feat: html5 拖拽(drag)相关api练习
1 parent 1026e53 commit e4e628d

File tree

2 files changed

+118
-0
lines changed

2 files changed

+118
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
4+
<head>
5+
<meta charset="UTF-8">
6+
<meta http-equiv="X-UA-Compatible" content="IE=edge">
7+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
8+
<title>drag</title>
9+
</head>
10+
11+
<style>
12+
ul {
13+
padding: 0;
14+
margin: 0 200px;
15+
border: 1px solid gray;
16+
padding: 0 20px;
17+
background-color: #ddd;
18+
box-shadow: 1px 3px 5px grey;
19+
}
20+
21+
li {
22+
list-style: none;
23+
height: 50px;
24+
width: 200px;
25+
margin: 20px 0;
26+
background-color: #fff;
27+
border: 1px solid #ddd;
28+
}
29+
30+
.hidden-ul {
31+
visibility: hidden;
32+
}
33+
</style>
34+
35+
<body>
36+
<div class="app">
37+
<ul></ul>
38+
</div>
39+
40+
</body>
41+
42+
<script src="./index.js" type="module"></script>
43+
44+
</html>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
const root = document.querySelector('.app')
2+
const ul = document.querySelector('ul')
3+
const dataList = ['11111', '22222', '33333', '44444', '55555']
4+
5+
dataList.forEach((item) => {
6+
const li = document.createElement('li')
7+
li.innerText = item
8+
li.draggable = true
9+
ul.appendChild(li)
10+
})
11+
12+
function throttle(func, delay) {
13+
let timeoutId
14+
let lastExecTime = 0
15+
16+
return function (...args) {
17+
const currentTime = Date.now()
18+
19+
if (currentTime - lastExecTime > delay) {
20+
clearTimeout(timeoutId)
21+
lastExecTime = currentTime
22+
func.apply(this, args)
23+
} else {
24+
clearTimeout(timeoutId)
25+
timeoutId = setTimeout(() => {
26+
lastExecTime = currentTime
27+
func.apply(this, args)
28+
}, delay)
29+
}
30+
}
31+
}
32+
const hadnleOver = throttle((event) => {
33+
const targetLi = document.querySelector('.hidden-ul')
34+
const changelist = [...document.querySelectorAll('ul li:not(.hidden-ul)')]
35+
const ret = changelist.find((item) => {
36+
// console.log(item)
37+
if (event.clientY <= item.offsetTop + item.offsetHeight / 2) {
38+
return item
39+
}
40+
})
41+
console.log(ret, event.target)
42+
targetLi && ul.insertBefore(targetLi, ret)
43+
}, 300)
44+
45+
function bindEvent() {
46+
const li = document.querySelectorAll('ul li')
47+
ul.addEventListener('dragover', hadnleOver)
48+
li.forEach((item) => {
49+
console.log(item)
50+
item.addEventListener(
51+
'drag',
52+
function () {
53+
// console.log('dragstart', this)
54+
},
55+
false
56+
)
57+
58+
// bind dragStart event
59+
item.addEventListener('dragstart', (event) => {
60+
const target = event.target
61+
setTimeout(() => {
62+
target.classList.add('hidden-ul')
63+
}, 0)
64+
console.log('start', event.target)
65+
})
66+
67+
item.addEventListener('dragend', (event) => {
68+
event.target.classList.remove('hidden-ul')
69+
console.log('end', event)
70+
})
71+
})
72+
}
73+
74+
bindEvent()

0 commit comments

Comments
 (0)