版本一
<style>
div{
width: 50px;
height: 50px;
background-color: red;
position: absolute;
left: 0;
top: 0;
}
</style>
</head>
<body>
<div></div>
<script>
var div = document.querySelector('div')
div.addEventListener('mousedown',mouseHandler)
function mouseHandler(e){
document.onmousemove = function(e1){
div.style.left = e1.clientX-e.offsetX+'px';
div.style.top = e1.clientY-e.offsetY+'px';
}
document.onmouseup = function(e2){
document.onmousemove = null;
document.onmouseup = null;
}
}
</script>
版本二
var offsetX = 0;
var offsetY = 0;
var div = document.querySelector('div')
div.addEventListener('mousedown',mouseHandler)
function mouseHandler(e){
document.addEventListener('mousemove',mousemoveHandler);
document.addEventListener('mouseup',mouseupHandler);
offsetX = e.offsetX;
offsetY = e.offsetY;
}
function mousemoveHandler(e){
div.style.left = e.clientX-offsetX+'px';
div.style.top = e.clientY-offsetY+'px';
}
function mouseupHandler(e){
document.removeEventListener('mousemove',mousemoveHandler)
document.removeEventListener('mouseup',mouseupHandler)
}
版本三
var offsetX = 0;
var offsetY = 0;
var div = document.querySelector('div')
div.addEventListener('mousedown',mouseHandler)
function mouseHandler(e){
if(e.type === 'mousedown'){
offsetX = e.offsetX;
offsetY = e.offsetY;
document.addEventListener('mousemove',mouseHandler);
document.addEventListener('mouseup',mouseHandler);
}else if(e.type === 'mousemove'){
div.style.left = e.clientX-offsetX+'px';
div.style.top = e.clientY-offsetY+'px';
}else if(e.type === 'mouseup'){
document.removeEventListener('mousemove',mouseHandler)
document.removeEventListener('mouseup',mouseHandler)
}
}
版本四
<script>
var div = document.querySelector('div')
div.addEventListener('mousedown',mouseHandler)
function mouseHandler(e){
if(e.type === 'mousedown'){
document.offsetX = e.offsetX;
document.offsetY = e.offsetY;
document.addEventListener('mousemove',mouseHandler);
document.addEventListener('mouseup',mouseHandler);
}else if(e.type === 'mousemove'){
div.style.left = e.clientX-this.offsetX+'px';
div.style.top = e.clientY-this.offsetY+'px';
}else if(e.type === 'mouseup'){
document.removeEventListener('mousemove',mouseHandler)
document.removeEventListener('mouseup',mouseHandler)
}
}
</script>
多个div拖曳
<div></div>
<div></div>
<div></div>
<div></div>
<script>
var divs = document.querySelectorAll('div')
for(var i=0;i<divs.length;i++){
divs[i].addEventListener('mousedown',mouseHandler)
}
function mouseHandler(e){
if(e.type === 'mousedown'){
document.offsetX = e.offsetX;
document.offsetY = e.offsetY;
document.div = this
document.addEventListener('mousemove',mouseHandler);
document.addEventListener('mouseup',mouseHandler);
}else if(e.type === 'mousemove'){
e.preventDefault();
this.div.style.left = e.clientX-this.offsetX+'px';
this.div.style.top = e.clientY-this.offsetY+'px';
}else if(e.type === 'mouseup'){
document.removeEventListener('mousemove',mouseHandler)
document.removeEventListener('mouseup',mouseHandler)
}
}
</script>