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:[email protected]
  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 = 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();

JS实现移动层

时间: 2024-10-17 00:43:00

JS实现移动层的相关文章

js显示隐藏层

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-

div+js 弹出层

<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>jQuery弹出层效果</title> <style> .black_overlay{ display: none; position: absolute; top: 0%; left: 0%; width: 100%; height: 100%; background

一个JS弹出层用户登录效果

<html> <head> <meta http-equiv="Content-Type"content="text/html; charset=gb2312"/> <title>接触角测定仪 http://www.dgshengding.com</title> <style> body,#Mdown{margin: 0;padding: 0;text-align: center;font: n

Js弹出层,弹出框代码

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Typ

很牛的js弹出层-artDialog4.1.2

[转]很牛的js弹出层-artDialog4.1.2 博客分类: javascript javascript 转自:http://www.iteye.com/topic/1117866 Sharpleo 写道 先让我们看看他提供的几种皮肤吧  功能: Java代码   1. 传入字符串 art.dialog({ content: '我支持HTML' }); 效果: Java代码   2. 传入HTMLElement 备注:1.元素不是复制而是完整移动到对话框中,所以原有的事件与属性都将会保留 2

关于移动端js弹出层滚动的时候 body层不可滚动的解决办法

最近在做移动端网站,在点击导航栏,弹出导航列表时,出现了问题.下滑列表时底层body也跟着滚动,连查带想的折腾了两天才解决这个问题.下面主要分享一下解决办法以及关键代码. 一.有的网友建议弹出层弹出时给 html 和 body 都加上"height:100%:overflow:hidden:",然而在手机上并没有什么卵用 二.结合弹出层加上"overflow-y:auto"依然不起作用 .... 后来经过网友的帮助,结合我的代码终于找到了解决的办法 我的项目是用vu

纯js制作遮罩层对话框 -- g皓皓

//本文支持js在线工具测试.转载请注明出处. <htmlxmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"/> <title>UntitledDocument</title> <script> func

js弹出层插件 -- weebox

1.引入文件: 使用前需包含以下jquery.js.bgiframe.js.weebox.js.wee.css文件 2.基本用法举例如下: <script type="text/javascript"> $.weeboxs.open('#testbox', { title: 'hello world', width:400, height: 200 }); $.weeboxs.open('The operation failed.',{ onopen:function(){

利用JS弹出层实现简单的动态提示“正在加载中,请稍等...”

JQuery版本:1.7.1: 编写一个JS类(ck.layer.js): [javascript] view plaincopy /************************************* Achievo.Javascript Library ************************** * Using jQuery 1.7.1 * Using cks.js 1.0.1 * Name : ck.layer.js * Create by Angle.Yang on 20