首页 > 网站 > WEB开发 > 正文

Javascript 事件对象进阶(二)拖拽的应用

2024-04-27 14:22:23
字体:
来源:转载
供稿:网友

javascript 事件对象进阶(二)拖拽的应用 - 登录框的拖拽

  1 <!doctype html>  2 <html>  3 <head>  4 <meta charset="utf-8">  5 <title>无标题文档</title>  6 <style type="text/CSS">  7 *{ margin:0; padding:0;}  8 body{ height:2000px;}  9 #login{ float:right; cursor:pointer;} 10 .ui-dialog{ width:380px; height:auto; position:fixed; z-index:100; top:100px; left:100px; border:1px solid #d5d5d5; background:#fff; display:none;} 11 .ui-dialog-title{ height:48px; line-height:48px; padding-left:20px; background:#efefef; cursor:move;} 12 .ui-dialog-contact{ height:300px; background:#ccc;} 13  14 .closed{ text-decoration:none; color:#000; position:absolute; top:0px; right:20px;} 15 .ui-mask{ width:100%; height:100%; background:#000; opacity:0.4; filter:Alpha(opacity=40); position:fixed; top:0; left:0; z-index:99; display:none;} 16 </style> 17 </head> 18  19 <body> 20 <p id="login">登录</p> 21 <div class="ui-dialog" id="dialog"> 22     <div class="ui-dialog-title" id="dialogTitle">登录通行证<a href="#" class="closed" id="closed">关闭</a></div> 23     <div class="ui-dialog-contact"></div> 24 </div> 25 <div class="ui-mask" id="mask" onslectstart='return false'></div> 26 </body> 27 </html> 28 <script type="text/Javascript"> 29  30 //获取元素对象 31 function g(id){ return document.getElementById(id);} 32  33 //自动居中 - 把登录浮层,水平和垂直居中在页面当中 34 function autoCenter(el){ 35     //获取页面可视区的宽度和高度 36     var bodyW=document.documentElement.clientWidth; 37     var bodyH=document.documentElement.clientHeight; 38      39     //获取登录浮层的宽度和高度 40     var elW=el.offsetWidth; 41     var elH=el.offsetHeight; 42      43     //设置登录浮层在页面当中居中 ,即left和right的值 44     el.style.left= Math.floor((bodyW-elW)/2) +'px'; 45     el.style.top= Math.floor((bodyH-elH)/2) +'px'; 46      47      48 }; 49  50 //自动全屏 - 把遮罩层放满整个屏幕 51 function fillToBody(el){ 52     //将传入元素的宽度和高度 设置成 当前可视区的宽度和高度 53     el.style.widht=document.documentElement.clientWidth +'px'; 54     el.style.height=document.documentElement.clientHeight +'px'; 55 }; 56  57  58 //推拽  -  三个关键鼠标事件 59  60     //鼠标偏移值 61     var mouSEOffsetX=0; 62     var mouseOffsetY=0; 63     //设置一个开关,是否可拖拽的标记 64     var isDraging=false; 65      66    //1.在标题栏上按下 - 鼠标在标题栏上按下时,要计算鼠标相对拖拽元素的左上角的坐标,并且标记元素为可拖动! 67    g('dialogTitle').addEventListener('mousedown',function(e){ 68         var e=e||window.event; 69         //计算鼠标的偏移 70         mouseOffsetX=e.pageX - g('dialog').offsetLeft;//鼠标事件当时点击时X的坐标 - 登录浮层当前相当于页面左边的位置 71         mouseOffsetY=e.pageY - g('dialog').offsetTop; 72          73         isDraging=true;//鼠标按下时候,打开开关,标记为可拖拽 74    }); 75     76    // 2.开始移动      -  鼠标开始移动,要检测登录浮层 是否可标记为移动,如果是,则更新元素的位置到当前鼠标的位置。(注意:要减去第一步中获得的偏移) 77    document.onmousemove=function(e){ 78         var e=e||window.event; 79         //获得当鼠标移动时候当前的位置 80         var mouseX=e.pageX; 81         var mouseY=e.pageY; 82          83         //浮层元素的新位置,用于记录 浮层移动时候的新位置 84         var moveX=0; 85         var moveY=0; 86          87         if(isDraging === true){ 88             moveX = mouseX - mouseOffsetX; 89             moveY = mouseY - mouseOffsetY; 90              91             //范围限定 moveX > 0 并且 moveX < (页面最大宽度 - 浮层的宽度) 92             //范围限定 moveY > 0 并且 moveY < (页面最大高度度 - 浮层的高度度) 93             var pageW=document.documentElement.clientWidth; 94             var pageH=document.documentElement.clientHeight; 95              96             var dialogW = g('dialog').offsetWidth; 97             var dialogH = g('dialog').offsetHeight; 98              99             var maxX=pageW - dialogW;100             var maxY=pageH - dialogH;101             102             moveX = Math.min(maxX , Math.max(0,moveX));103             moveY = Math.min(maxY , Math.max(0,moveY));104 105             g('dialog').style.left = moveX+'px';106             g('dialog').style.top = moveY+'px';107         };108 109     };110    111    // 3.放开          - 鼠标松开的时候,标记元素为不可拖动状态即可。112    document.onmouseup=function(){113       isDraging=false;114    };115    116    //展现登录浮层117    function show(){118         g('dialog').style.display='block';119         g('mask').style.display='block';120         autoCenter(g('dialog'));121         fillToBody(g('mask'));122     };123     124     //关闭登录浮层125     function hide(){126         g('dialog').style.display='none';127         g('mask').style.display='none';128     };129      130      //窗口大小改变的事件处理131      window.onresize = function(){132         autoCenter(g('dialog'));133         fillToBody(g('mask'));134      };135      136     g('login').onclick=show;     137     g('closed').onclick=hide;     138 139 </script>


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表