国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

原生js實現彈出層登錄拖拽功能

2019-11-19 18:39:43
字體:
來源:轉載
供稿:網友

在WEB開發過程中,總會遇到一些從未接觸過的需求,總是想盡一切辦法去研究,最終實現效果,在實現效果的那一刻成就感爆棚,有木有?

留言墻、彈出框等一些常見地方都有拖拽功能,方便用戶體驗嘛。

實現拖拽功能 ,三個事件 mousemove , mouseup ,mousedown, 偏移量(offsetLeft, offsetTop , offsetWidth ,offsetHeight),窗口坐標位置(clientX ,clientY ) 以及獲取可視區域方法的兼容性處理。

之前做的比較多的留言墻效果時寫過的,這當時做的筆記,現在來整理整理。

JavaScript代碼:

window.onload = function() { var btn = document.getElementsByClassName('login')[0] var close = document.getElementById('close'); var login = document.getElementById('login'); var top = (document.documentElement.clientHeight - 250) / 2; //top值等于(獲取頁面可視區域的寬度 - 登錄框的高度) / 2 var left = (document.documentElement.clientWidth - 350) / 2; var open = document.getElementById('screen'); btn.onclick = function() {  login.style.display = 'block';  login.style.left = left + 'px';  login.style.top = top + 'px';  open.style.display = 'block';  open.style.width = getInner().width + 'px'; //彈出層的寬度等于可視窗口的寬度  open.style.height = getInner().height + 'px'; } close.onclick = function() {  login.style.display = 'none';  open.style.display = 'none'; } window.onresize = function() {   var top = (getInner().height - 250) / 2;   var left = (getInner().width - 350) / 2;   login.style.left = left + 'px';   login.style.top = top + 'px';  }  //跨瀏覽器獲取可視窗口 function getInner() {  if (window.innerWidth != 'undefined') { //IE 不支持返回undefind   return {    width: window.innerWidth,    height: window.innerHeight   }  } else {   return {    width: document.documentElement.clientWidth,    height: document.documentElement.clientHeight   }  } } //實現拖拽功能 ,三個事件 mousemove , mouseup ,mousedown //clientX ,clientY 時鼠標指針相對于整個屏幕的坐標距離 //offsetLeft, offsetTop 獲取當前元素相對于父元素的位置,在這里,父元素是document login.onmousedown = function(e) {   stop(e); //阻止事件默認行為   var e = e || window.event;   var oLeft = e.clientX - login.offsetLeft; //login.offsetLeft 獲取盒子邊框到瀏覽器左邊框的距離   var otop = e.clientY - login.offsetTop;   document.onmousemove = function(e) { //移動的是整體的doucment    var e = e || window.event;    //不能移出可視區域    var left = e.clientX - oLeft;    var top = e.clientY - otop;    //左右    if (left < 0) { //如果盒子距左邊的距離小于零,即超出     left = 0;    } else if (left > getInner().width - login.offsetWidth) { //可視區域的長度,減去盒子的長度 offsetWidth     left = getInner().width - login.offsetWidth;    }    //上下    if (top < 0) {     top = 0;    } else if (top > getInner().height - login.offsetHeight) {     top = getInner().height - login.offsetHeight;    }    login.style.left = left + 'px';    login.style.top = top + 'px';   }   document.onmouseup = function() {    document.onmousemove = null;    document.onmouseup = null;   }  }  //取消默認行為 function stop(e) {  var e = e || window.event;  if (typeof e.preventDefault != 'undefined') {   e.preventDefault(); //W3C  } else {   e.returnValue = false; //IE阻止事件默認行為  } }}

HTML代碼:

<div id="header"> <div class="logo"><img src="images/logo.gif" alt="" /></div> <div class="member">個人中心  <ul class="list">   <li><a href="###">設置</a></li>   <li><a href="###">換膚</a></li>   <li><a href="###">幫助</a></li>   <li><a href="###">退出</a></li>  </ul> </div> <div class="login">登錄</div></div><div id="login"> <h2><img src="images/close.png" alt="" class="close" id="close" />登錄</h2> <div class="user">用戶名<input type="text" name="user" class="text" /></div> <div class="pass">密  碼   <input type="password" name="pass" class="text" /></div> <div class="button">  <input type="button" class="submit" value="" /></div> <div class="other">注冊新用戶 | 忘記密碼</div></div><div id="screen"></div><script type="text/javascript" src="demo.js"></script>

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 蕲春县| 敖汉旗| 靖边县| 新蔡县| 水城县| 高安市| 濉溪县| 清新县| 双流县| 利津县| 郸城县| 屏东市| 大新县| 和顺县| 乐平市| 葵青区| 建阳市| 古蔺县| 玉山县| 武宣县| 当雄县| 昌吉市| 辛集市| 石林| 邮箱| 瑞丽市| 仁寿县| 炎陵县| 鄂尔多斯市| 太保市| 小金县| 承德县| 临西县| 台州市| 常州市| 加查县| 贵德县| 蓬安县| 万载县| 泾川县| 阳山县|