javascript div元素鼠标拖动效果详解
任何复杂的功能都是由一个个简单的功能叠加而成,本章节就详细介绍一下如何实现利用鼠标拖动div元素运动效果。
并且能够实现限制div元素拖动的范围,需要的朋友可以做一下参考。
代码实例:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.pipipi.net/" /> <title>前端教程网</title> <style type="text/css"> #antzone{ width:100px; height:100px; background:red; position:absolute } </style> <script type="text/javascript"> window.onload=function(){ var oDiv=document.getElementById("antzone"); var x=0; var y=0; oDiv.onmousedown=function(ev){ var oEvent=ev||event; //鼠标的横坐标减去div的offsetLeft x=oEvent.clientX-oDiv.offsetLeft; //鼠标的纵坐标减去div的offsetTop y=oEvent.clientY-oDiv.offsetTop; document.onmousemove=function(ev){ var oEvent=ev||event; var left=oEvent.clientX-x; var right=oEvent.clientY-y; //判断左边是否过界 if(left<0){ left=0; } //判断右边是否过界 else if(left>document.documentElement.clientWidth-oDiv.offsetWidth){ left=document.documentElement.clientWidth-oDiv.offsetWidth; } //判断上边是否过界 if(right<0){ right=0; } //判断下边是否过界 else if(right>document.documentElement.clientHeight){ right=document.documentElement.clientHeight-oDiv.offsetHeight; } oDiv.style.left=left+"px"; oDiv.style.top=right+"px"; } document.onmouseup=function(){ //清空document的事件 document.onmousemove=null; document.onmouseup=null; } } } </script> </head> <body> <div id="antzone"></div> </body> </html>
上面的代码实现了我们的要求,下面介绍一下它的实现过程。
一.代码注释:
(1).window.onload=function(){},当文档内容完全加载完毕再去执行函数中的代码。
(2).var oDiv=document.getElementById("antzone"),获取元素对象。
(3).var x=0,声明一个变量x,并赋值为0。
(4).var y=0,声明一个变量y,并赋值为0。
(5).oDiv.onmousedown=function(ev){},为div元素注册onmousedown事件处理函数。
(6).var oEvent=ev||event,获取兼容所有主流浏览器的事件对象。
(7).x=oEvent.clientX-oDiv.offsetLeft,获取当按下鼠标键的时候,鼠标指针所在位置距离div元素左侧的距离。
(8).y=oEvent.clientY-oDiv.offsetTop,获取当按下鼠标键的时候,鼠标指针所在位置距离div元素上侧的距离。
(9).document.onmousemove=function(ev){},为文档注册onmousemove事件处理函数,之所以注册在文档上是为了防止,鼠标离开div范围,导致拖动无效的情况。
(10).var oEvent=ev||event,获取兼容所有浏览器的事件对象。
(11).var left=oEvent.clientX-x,计算出拖动时div元素左侧距离浏览器客户区左侧的距离。
(12).var right=oEvent.clientY-y,计算出拖动时div元素上不距离浏览器客户区上册的距离。
(13).if(left<0){
left=0;
},判断是否小于0,如果小于0就设置为0,防止拖动超出浏览器客户区左侧。
(14).else if(left>document.documentElement.clientWidth-oDiv.offsetWidth){
left=document.documentElement.clientWidth-oDiv.offsetWidth;
},这个是为了防止超出浏览器客户区右侧。
(15).document.onmouseup=function(){
//清空document的事件
document.onmousemove=null;
document.onmouseup=null;
},解绑事件处理函数。
二.相关阅读:
(1).onmousedown时间可以参阅javascript mousedown事件一章节。
(2).var oEvent=ev||event可以参阅var ev=window.event||ev的作用是什么一章节。
(3).clientX可以参阅javascript clientX一章节。
(4).offsetLeft可以参阅js offsetLeft一章节。
(5).clientWidth可以参阅clientWidth一章节。
(6).offsetWidth可以参阅js offsetWidth一章节。