首页 > 代码库 > JS实现移动层

JS实现移动层

在网上搜了很多实现移动层的代码,体验都不太好,于是自己写了,贴在这里先。

 

html:

<!DOCTYPE html><html><head>    <title></title>    <meta charset="utf-8">    <style>        *{margin: 0;padding: 0;}        .warp{            width: 400px;            height: 300px;            border: 1px solid #C2C2C2;            border-radius: 3px;            position: absolute;            top: 10px;            left: 10px;            z-index: 99;        }        .move{            width: 400px;            height: 50px;            background: -webkit-linear-gradient(top,#f2f2f2,#C2C2C2);            cursor:move;            border-top-left-radius: 3px;            border-top-right-radius: 3px;            z-index: 100;        }        .content{            width: inherit;            height: 250px;;            background: #f2f2f2;        }    </style></head><body style="width: 100%;height: 1000px;background: red;"><!--移动层begin-->  <div class="warp" id="warp">    <div class="move" id="move"></div>    <div class="content"></div>  </div><!--移动层end--><script src="js/tt.0.0.1.js"></script><script>    TT.drag("warp","move");</script></body></html>

 

JS:

  1 /**  2  * _TT  3  * version:0.0.1  4  * author:taozhiwork@foxmail.com  5  */  6 function TT(){  7     var _w = window;  8         _d = _w.document;  9         _self = this; 10     /* 11      *拖拽 12      */ 13     this.drag = function moveDivByOtherDiv(moveDiv,dargDiv){ 14         var mDiv = _d.getElementById(moveDiv), 15             dDiv = _d.getElementById(dargDiv), 16             mW = WindowUtil.getPageWidth(), 17             mH = _d.body.offsetHeight, 18             oW = mDiv.offsetWidth, 19             oH = mDiv.offsetHeight, 20             gX = 0, 21             gY = 0; 22         //鼠标在目标层上按下 23         function eMouseDown(event){ 24             var e = event || _w.event; 25 //                if(e.button&&e.button!==0){return false;} //鼠标左键点击触发 26             EventUtil.stopPropagationAndPreventDefault(e); 27             gX = e.clientX - OffsetUtil.getElementLeft(mDiv); 28             gY = e.clientY - OffsetUtil.getElementTop(mDiv); 29             dDiv.isMove = true; 30         } 31         //鼠标在document中移动 32         function eMouseMove(event){ 33             var e = event || _w.event, 34                 mX = 0, 35                 mY = 0; 36             if(!dDiv.isMove){return false;} 37             EventUtil.stopPropagationAndPreventDefault(e); 38             mY = e.clientY-gY; 39             mX = e.clientX-gX; 40             if(mX<0){ 41                 mX = 0; 42             }else if(mX>mW-oW){ 43                 mX = mW-oW; 44             } 45             if(mY<0){ 46                 mY = 0; 47             }else if(mY>mH-oH){ 48                 mY = mH-oH; 49             } 50             mDiv.style.top = mY+"px"; 51             mDiv.style.left = mX+"px"; 52         } 53         //鼠标在document上松开 54         function eMouseUp(event){ 55             var e = event || _w.event; 56             EventUtil.stopPropagationAndPreventDefault(e); 57             dDiv.isMove = false; 58         } 59         EventUtil.addHandler(dDiv,"mousedown",eMouseDown); 60         EventUtil.addHandler(_d,"mouseup",eMouseUp); 61         EventUtil.addHandler(_d,"mousemove",eMouseMove); 62     } 63     /* 64      *事件相关函数 65      */ 66     var EventUtil = { 67         //添加事件 68         addHandler : function(element,type,handler){ 69             if(element.addEventListener){ 70                 element.addEventListener(type,handler,false); 71             }else if(element.attachEvent){ 72                 element.attachEvent("on"+type,handler) 73             }else{ 74                 element["on"+type] = handler; 75             } 76         }, 77         //移除事件 78         removeHandler : function(element,type,handler){ 79             if(element.removeEventListener){ 80                 element.removeEventListener(type,handler,false); 81             }else if(element.detachEvent){ 82                 element.detachEvent("on"+type,handler); 83             }else{ 84                 element["on"+type] = null; 85             } 86         }, 87         //阻止事件冒泡 88         stopPropagation : function(e){ 89             if (e.bubbles&&e.stopPropagation){ 90                 e.stopPropagation(); 91             }else if(e.cancelBubble){ 92                 //阻止IE中冒泡事件 93                 e.cancelable = true; 94             } 95         }, 96         //阻止默认事件 97         preventDefault : function(e){ 98             if (e.cancelable&&e.preventDefault){ 99                 e.preventDefault();100             }else if(e.returnValue){101                 //阻止IE中的默认事件102                 e.returnValue = http://www.mamicode.com/false;103             }104         },105         //阻止事件冒泡同时阻止默认事件106         stopPropagationAndPreventDefault : function(e){107             this.stopPropagation(e);108             this.preventDefault(e);109         }110     };111     /*112      *位置相关函数113      */114     var OffsetUtil = {115         //获得元素距离窗口左边距离116         getElementLeft : function(element){117             var actual = element.offsetLeft,118                 current = element.offsetParent;119             while(current!==null){120                 actual += current.offsetLeft;121                 current = current.offsetParent;122             }123             return actual;124         },125         //获得元素距离窗口上边的距离126         getElementTop : function(element){127             var actual = element.offsetTop,128                 current = element.offsetParent;129             while(current!==null){130                 actual += current.offsetTop;131                 current = current.offsetParent;132             }133             return actual;134         }135     };136     /*137      *窗口相关工具函数138      */139     var WindowUtil = {140         //获得页面视口宽度141         getPageWidth : function(){142             var pageWidth = window.innerWidth;143             if(typeof pageWidth != "number"){144                 if(document.compatMode == "CSS1Compat"){145                     pageWidth = document.documentElement.clientWidth;146                 }else{147                     pageWidth = document.body.clientWidth;148                 }149             }150             return pageWidth;151         },152         //获得页面视口高度153         getPgaeHeight : function(){154             var pageHeight = window.innerHeight;155             if(typeof  pageHeight != "number"){156                 if(document.compatMode == "CSS1Compat"){157                     pageHeight = document.documentElement.clientHeight;158                 }else{159                     pageHeight = document.body.clientHeight;160                 }161             }162             return pageHeight;163         }164     }165 };166 //实例化对象167 var TT = new TT();