javascript实现鼠标拖动层效果代码

javascript实现鼠标拖动层效果代码:
这一章节介绍一下如何实现div的任意拖动效果如果单纯就一个拖动效果或许没有多少实际的意义,不过它牵扯到不少的知识点,在掌握这个功能的同事能够对众多知识点有一个清晰的把握,下面就通过一个实例来介绍一下如何实现此功能。
代码实例如下:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>div拖动效果代码-蚂蚁部落</title>
<style type="text/css">
#eldiv
{
  width:140px;
  height:100px;
  background:#EEE;
  position:absolute;
  left:117px;
  top:124px;
}
</style>
<script type="text/javascript"> 
var isDrag = false; 
function isIE()
{ 
  if(navigator.userAgent.indexOf("MSIE")>0)
  {
     return true;
  } 
  else
  {
     return false;
  } 
}
 
function getStyle(object,attrName)
{
  if(object.currentSyle) 
  {
     return object.currentSyle[attrName];
  }
  if(window.getComputedStyle)
  {
     return window.getComputedStyle(object,null)[attrName];
  }
}
function addListener(element,e,fn)
{ 
  if(isIE())
  {
     element.attachEvent("on" + e,fn);
  } 
  else
  {
     element.addEventListener(e,fn,false);
  } 
}
function drag(e)
{ 
  var e = e || window.event; 
  var element = e.srcElement || e.target; 
  if(e.preventDefault)
  {
    e.preventDefault();
  }
  else 
  {
    e.returnvalue=false;
  }
  isDrag = true;  
  var relLeft = e.clientX - parseInt(getStyle(element,"left")); 
  var relTop = e.clientY - parseInt(getStyle(element,"top")); 
  element.onmouseup = function(){ isDrag = false; } 
  document.onmousemove = function(e_move)
  { 
    var e_move = e_move || window.event; 
    if(isDrag)
    { 
      element.style.left=e_move.clientX - relLeft + "px"; 
      element.style.top=e_move.clientY - relTop + "px"; 
      return false; 
    } 
  } 
} 
window.onload = function() 
{ 
  var eldiv = document.getElementById("eldiv"); 
  addListener(eldiv,"mousedown",drag); 
} 
</script> 
<body>
<div id="eldiv"></div> 
</body>
</html>

 

注意:运行编辑器之后,再按F5刷新网页即可查看演示。
以上代码实现我们想要的div鼠标拖动功能,下面简单介绍一下实现过程:
一.实现原理:
原理非常的简单,当鼠标按下的时候会将isDrag设置为true,也就是说它能够拖动,并且计算出当前鼠标指针距离div上边缘和左边缘的距离。当在div中移动鼠标指针的时候,将div的坐标不断的设置为当前指针clientX和clientY值减去左边缘和上边缘的距离,这样就实现了拖动效果。
二.代码注释:
1.var isDrag = false,设置一个标识,用来说明是否可以拖动,默认状态下是不可以拖动的。
2.function isIE(),判断是否是IE浏览器,更多相关内容可以参阅javascript如何判断浏览器的类型和版本一章节。

3.function getStyle(object,attrName){},获取指定对象的指定样式属性的属性值,更多相关内容可以参阅js如何获取非内部取样式表中定义的属性值一章节。
4.function addListener(element,e,fn){},注册事件处理函数,更多相关内容可以参阅javascript如何注册事件处理函数一章节。
5.function drag(e){},规定如何处理拖动。
6.var e = e || window.event,获取事件对象,更多可以参阅javascript事件对象参数兼容各浏览器写法一章节。
7.var element = e.srcElement || e.target,获取事件目标对象,可以参阅srcElement事件属性target事件属性
8.if(e.preventDefault){},用来阻止默认动作,可以参阅javascript的preventDefault()方法javascript的returnValue事件属性
9.isDrag = true,设置为true,说明可以拖动。
10.var relLeft = e.clientX - parseInt(getStyle(element,"left")),计算出鼠标指针距离div左边缘的距离。
11.var relTop = e.clientY - parseInt(getStyle(element,"top")),计算出鼠标指针距离div上边缘的距离。

12.element.onmouseup = function(){ isDrag = false; },当松开鼠标时,就不能拖动了。
13.document.onmousemove = function(e_move){},为div注册onmousemove事件处理函数。
14.element.style.left=e_move.clientX - relLeft + "px",计算出拖动鼠标时,div的left属性值。
15
.element.style.top=e_move.clientY - relTop + "px",计算出拖动鼠标时,div的top属性值。
16
.window.onload = function(){},当页面完全加载完毕后再去执行其中的代码。
17.var eldiv = document.getElementById("eldiv"),获得div对象。
18.addListener(eldiv,"mousedown",drag),执行函数用以注册事件处理函数。
 
 
 

猜你喜欢

转载自softwhy.iteye.com/blog/2265172
今日推荐