javascript拖拽效果

思路:
1.拖拽用到的三个事件:鼠标按下(onmousedown)、鼠标移动(onmousemove)、鼠标松开(onmouseup)
2.当鼠标按下时:获取鼠标按下的位置、获取元素的当前位置
3.当鼠标移动时:获取窗口的宽度(用于判断边界)、获取鼠标移动的距离(决定元素移动的距离)
4.判断边界:
  1.当元素的offsetLeft小于0时,元素的offsetLeft为0,
  2.当元素的offsetTop小于0时,元素的offsetTop为0,
  3.当元素的offsetLeft大于窗口宽度-元素宽度时,即元素在最右边,此时元素的offsetLeft为窗口宽度-元素宽度
  4.当元素的offsetTop大于窗口高度-元素高度时,即元素在最下边,此时元素的offsetTop为窗口高度-元素高度
5.当鼠标松开时:关闭开关。
 1 <script type="text/javascript">
 2         window.onload = function(){
 3             //获取元素
 4             var oBox = document.getElementById("box");
 5             //定义开关
 6             var bool = false;
 7             //获取元素的宽高
 8             var bWidth = oBox.clientWidth;
 9             var bHeight = oBox.clientHeight;
10             //定义变量
11             var bx,by,mx,my; 
12             oBox.onmousedown = function(e){
13                 var oEvent = e || event;
14                 //当鼠标在元素上按下时,打开开关
15                 bool = true;
16                 //获取按下鼠标时元素的位置和鼠标的位置
17                 bx = oBox.offsetLeft;
18                 by = oBox.offsetTop;
19                 mx = oEvent.clientX;
20                 my = oEvent.clientY;
21             }
22             document.onmousemove = function(e){
23                 var oEvent = e || event;
24                 //获取窗口的宽高
25                 var wWidth = document.documentElement.clientWidth;
26                 var wHeight = document.documentElement.clientHeight;
27                 //判断鼠标是否被按下
28                 if (bool) {
29                     //获取鼠标移动的距离
30                     var x = oEvent.clientX - mx + bx;
31                     var y = oEvent.clientY - my + by;
32                     //判断边界
33                     x <= 0?x = 0:(x>=wWidth-bWidth?x = wWidth-bWidth:x);
34                     y <=0?y = 0:(y>=wHeight-bHeight?y = wHeight-bHeight:y);
35                     //元素定位
36                     oBox.style.left = x+"px";
37                     oBox.style.top = y+"px";
38                 }
39             }
40             document.onmouseup = function(){
41                 //松开鼠标,关闭开关
42                 bool = false;
43             }
44         }
45     </script>     
<div id="box"></div>
*{margin:0;padding:0;}
#box{width:100px;height:100px;background:red;position: absolute;cursor: move;}

 

posted @ 2017-03-17 20:57  前端boy  阅读(1084)  评论(0)    收藏  举报