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一章节。

回复

我来回复
  • 暂无回复内容