dragDemo
by LUPIN34
HTML
<div id='drag' draggable='true'>
</div>
CSS
#drag {
position: absolute;
display: inline-block;
height: 100px;
width: 100px;
background-color: #eee;
border: 1px solid #000;
}
JavaScript
class Drag {
constructor (ele) {
this.x = 0
this.y = 0
this.ele = ele
this.relativeX = 0
this.relativeY = 0
this.init()
}
init () {
this.ele.addEventListener('dragstart', (event) => {
this.start(event)
})
this.ele.addEventListener('dragend', (event) => {
// 获取不到坐标
event.preventDefault()
this.end(event)
})
this.ele.addEventListener('drag', (event) => {
// 获取不到坐标
console.log('拖拉过程中,在被拖拉的节点上持续触发。', event)
})
this.ele.addEventListener('mousedown', (event) => {
this.relativeX = event.clientX - this.ele.offsetLeft
this.relativeY = event.clientY - this.ele.offsetTop
})
document.addEventListener('dragenter', function (event) {
// 可以获取鼠标位置
event.preventDefault()
console.log('dragenter---------------', event)
})
document.addEventListener('dragover', (event) => {
// 可以获取鼠标位置
event.preventDefault()
this.drag(event)
console.log('dragover', event)
})
}
start (event) {
event.dataTransfer.setData('text/plain', '')
console.log(this.ele)
}
end (event) {
console.log(this.x, this.y, '松开鼠标', event)
event.target.style.left = this.x - this.relativeX + 'px'
event.target.style.top = this.y - this.relativeY + 'px'
}
drag (event) {
this.x = event.clientX
this.y = event.clientY
console.log(event, this, '拖动中---')
}
}
let dragEle = document.getElementById('drag');
new Drag(dragEle);