1)在目标元素上按下鼠标(这里没有细分左右键),也就是mousedown事件
2)按下鼠标的同事,拖动鼠标,相当于在mousedown事件中绑定mousemove事件
3)停止拖拽,释放鼠标按键,也就是mouseup事件
代码表示如下:
targetNode.οnmοusedοwn=function(){
...
document.οnmοusemοve=function(){
....
}
document.οnmοuseup=function(){
....
}
}
这里的mousemove和mouseup事件都绑定在document上而不是目标元素上
是因为拖拽的时候鼠标随时可能离开目标元素,这样将导致mouseover和mouseup
找不到目标而影响拖拽的效果,具体代码如下(ps:下面的代码在火狐下是有bug的,这是因为拖拽元素的innerHTML是空的,解决办法可以加空的<span></span>标签或让其里面有内容即可,有兴趣可 以试一下)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" >
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<style type="text/css">
*{ margin:0; padding:0;}
#dragDiv{ width:200px; height:200px; position:absolute; top:100px; left:100px; background:#ddd;}
</style>
</head>
<body>
<div id="dragDiv"></div>
<script type="text/javascript">
var dragDiv=document.getElementById('dragDiv');
//鼠标按下动作
dragDiv.οnmοusedοwn=function(event){
var e=event||window.event,
t=e.target||e.srcElement,
//鼠标按下时的坐标x1,y1
x1=e.clientX,
y1=e.clientY,
//鼠标按下时的左右偏移量
dragLeft=this.offsetLeft,
dragTop=this.offsetTop;
document.οnmοusemοve=function(event){
var e=event||window.event,
t=e.target||e.srcElement,
//鼠标移动时的动态坐标
x2=e.clientX,
y2=e.clientY,
//鼠标移动时的坐标的变化量
x=x2-x1,
y=y2-y1;
dragDiv.style.left=(dragLeft+x)+'px';
dragDiv.style.top=(dragTop+y)+'px';
}
document.οnmοuseup=function(){
this.οnmοusemοve=null;
}
}
</script>
</body>
</html>