思路:
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>
*{margin:0;padding:0;}
#box{width:100px;height:100px;background:red;position: absolute;cursor: move;}