只记录left,top同理。
clientX:返回鼠标相对于浏览器的水平坐标;
offsetLeft:返回当前对象距离浏览器(父对象)的左侧距离;
offsetWidth:对象的可见宽度;
onmousemove:鼠标移动事件;
连接点是鼠标放在div上拖动时的位置(坐标)不会改变的,起名字为unchangX;
鼠标拖动事件是利用position:absolute绝对定位改变left和top,left的位置是通过clientX-unchangeX得到的。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>鼠标拖拽事件</title>
<style type="text/css">
#box{
width:100px;
height:100px;
background-color:cornflowerblue;
position:absolute;
left:0;
top:0;
}
</style>
</head>
<body>
<div id="box"></div>
<script type="text/javascript">
window.onload = function(){
var oDiv = document.getElementById("box"),
unchangeX = 0,
unchangeY = 0;
oDiv.onmousedown =function(ev){//鼠标按下
var oEvent=ev||event;
var unchangeX = oEvent.clientX - oDiv.offsetLeft;//鼠标的x坐标减去box的左边距离,unchangeX这个距离是不会变的,通过这个新鼠标的X坐标减去unchangeX就是box的Left
var unchangeY = oEvent.clientY - oDiv.offsetTop;
document.onmousemove = function(ev){//为了防止鼠标移动太快而离开了DIV产生了bug,所以要给整个页面加onmousemove事件
var oEvent = ev||event;
var oLeft = oEvent.clientX - unchangeX;
var oTop = oEvent.clientY - unchangeY;
//优化部分:鼠标移动到浏览器左侧、右侧、上侧、下侧时的问题
if(oLeft < 0){
oLeft = 0;
}else if(oLeft>document.documentElement.clientWidth - oDiv.offsetWidth){
oLeft = document.documentElement.clientWidth - oDiv.offsetWidth;
}
if(oTop < 0){
oTop = 0;
}else if(oTop>document.documentElement.clientHeight - oDiv.offsetHeight){
oTop = document.documentElement.clientHeight - oDiv.offsetHeight;
}
oDiv.style.left = oLeft + 'px';
oDiv.style.top = oTop + 'px';
};
document.onmouseup = function(){//鼠标松开时
document.onmousemove = null;//把鼠标移动清除
document.onmouseup = null;//把鼠标松开清除
};
return false;
};
}
</script>
</body>
</html>