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

首頁 > 編程 > JavaScript > 正文

基于Javascript實現彈出頁面效果

2019-11-20 10:52:52
字體:
來源:轉載
供稿:網友

彈出層效果是一個很實用的功能,很多網站都采用了這種方式實現登錄和注冊,比如百度:

彈出層的特點:點擊登錄或注冊的時候在頁面的中間部分彈出一個登錄或注冊區域并且頁面有一個遮罩層,而且登錄框在遮罩層之上,也就是登陸框的z-index值要大于遮罩層的z-index值。當點擊關閉或者遮罩層時關閉登錄或者注冊框(有的網頁沒有實現點擊遮罩層關閉登錄或注冊區域的功能。)。

最近也做了一個類似的彈出層的效果,先展示一下最終效果:

簡單的說一下實現的過程。

首先是遮罩層。遮罩層是在頁面動態加載的過程中創建的,因為遮罩層需要遮住整個頁面,所以遮罩層的高度是通過在JavaScript計算得到,而它的寬度是整個頁面的寬度,這個也很容易得到。還需要給它設一個z-index值,盡可能很大,因為需要遮住整個頁面。當然透明度也是必須的。

#mask{ background: #000;opacity: .6;filter:alpha(opacity=60);position:absolute;left:0;top:0;width:100%;height:1000px;/*動態獲取,這里設置高度是為了測試*/z-index:1000;}

通過JavaScript動態創建遮罩層,然后添加到頁面中:  

//創建遮罩層節點var oMask = document.createElement('div');oMask.id = 'mask';oMask.style.width = pageWidth + 'px';oMask.style.height = pageHeight + 'px';document.body.appendChild(oMask);

上面代碼中的pageWidth和pageHeight就會頁面的寬度和高度值,通過

//獲取頁面的高度和寬度var pageHeight = document.documentElement.scrollHeight;var pageWidth = document.documentElement.scrollWidth;

獲取。這樣遮罩層就完成了。

再來說說彈出層的效果。

彈出層在頁面的中間部分顯示(這也是關鍵的步驟),也就是彈出層距離頁面左邊和右邊的距離相等,距離頁面上邊的距離和距離下邊的距離相等。注意是在可是區域中。

  

用公式表示就是:

left=right=(頁面可是區域寬度 - 彈出層寬度)/2;top=bottom=(頁面可是區域的高度-彈出層高度)/2

而這里可是區域的寬度等于頁面的寬度,因為頁面底部米有滾動條。底部有滾動條的網頁也是奇葩啊。設置它的left和top值之前必須已經將它添加到頁面當中去了,否則無法設置。

oLogin.style.left = (pageWidth - loginWidth) / 2 + 'px';oLogin.style.top = ( clientHeight- loginHeight) / 2 + 'px';

武林網提醒大家需要注意,這里彈出層的定位方式是固定定位的,而且它的z-index值要大于遮罩層的。

#login{position:fixed;width:400px;height:400px;background:#fff;z-index: 1001;}

最后就是給關閉按鈕添加事件響應函數了。

EventUtil.addHandler(oClose, 'click', function(){document.body.removeChild(oMask);document.body.removeChild(oLogin);});

EventUtil是一個為了兼容瀏覽器事件處理函數而寫的一個對象,具體的實現在這里:

var EventUtil = {//添加事件處理函數addHandler: function(element, type, handler){if(element.addEventListener){element.addEventListener(type, handler, false);}else if(element.attachEvent){element.attachEvent('on' + type, handler);}else{element['on' + type] = handler;}},//刪除事件處理函數removeHandler: function(element, type, handler){if (element.removeEventListener) {element.removeEventListener(type, handler, false);}else if(element.detachEvent){element.detachEvent('on' + type, handler);}else{element['on' + type] = null;}}};

到這里大部分的內容就完成了,其實現實起來很簡單。只要知道了原理,剩下的就是實現方式了。

點擊登錄按鈕那個功能就不介紹了,加個事件處理函數就行了。  

源碼(寫的不規范):

<!DOCTYPE html><html><head><meta charset="utf-8"/><title>遮罩層效果</title><style type="text/css">*{margin:0;padding:0;}body{background: #ccc;font-family: "微軟雅黑";height:2000px;/*用于測試*/}.clearfix:after,.clearfix:before{content: "";display: block;}.clearfix{clear: both;visibility: hidden;}img{border: 0;}#header{width:100%;height:60px;line-height:60px;background: #000;}#header a{display: block;width:60px;height:60px;color:#fff;text-decoration: none;font-size:15px;background:#c9394a;text-align: center;float: right;margin-right:138px;}#login{position:fixed;width:400px;height:400px;background:#fff;z-index: 1001;}.title{height:50px;background: #c9394a;line-height: 50px;}.title span{display:inline-block;color:#fff;padding-left:20px;}.title a{display: block;float:right;background: url(close.png) no-repeat center;width: 30px;height:30px;padding:20px 20px 0 0;}.login_content form{padding-top:40px;width:340px;margin: 0 auto;}.inp_group{margin-bottom:30px;}#username{background: url(sprite.png) no-repeat 0 0;}#passwd{background: url(sprite.png) no-repeat 0 -46px;}input[type=password],input[type="text"]{width:272px;height:40px;outline: none;padding-left:48px;border: 1px solid #000;font-size:15px;}input[type=button]{width:318px;height:38px;margin:0 auto;border:1px solid #f00000;background-color:#f00000;color:#fff;font-size:15px;outline:none;cursor:pointer;transition:all 1s;}input[type=button]:hover{background:#ff0000;border:1px solid #ff0000;}#mask{background: #000;opacity: .6;filter:alpha(opacity=60);position:absolute;left:0;top:0;width:100%;height:1000px;/*動態獲取,這里設置高度是為了測試*/z-index:1000;}</style><script type="text/javascript" src="base.js"></script><script type="text/javascript">function popLogin(){//獲取頁面的高度和寬度var pageHeight = document.documentElement.scrollHeight;var pageWidth = document.documentElement.scrollWidth;//可視區域的高度和寬度var clientHeight = document.documentElement.clientHeight;//創建遮罩層節點var oMask = document.createElement('div');oMask.id = 'mask';oMask.style.width = pageWidth + 'px';oMask.style.height = pageHeight + 'px';document.body.appendChild(oMask);//創建登錄節點var oLogin = document.createElement('div');oLogin.id = 'login';oLogin.innerHTML = '<div class="title"><span>登錄</span><a href="javascript:;" id="close"></a></div><div class="login_content"><form method="post" action="?"><div class="inp_group"><input type="text" name="username" id="username" placeholder="請輸入登錄郵箱"></div><div class="inp_group"><input type="password" name="password" id="passwd" placeholder="請輸入密碼"></div><input type="button" value="登錄"></form></div>';document.body.appendChild(oLogin);var loginWidth = oLogin.offsetWidth;var loginHeight = oLogin.offsetHeight;console.log(clientHeight);oLogin.style.left = (pageWidth - loginWidth) / 2 + 'px';oLogin.style.top = ( clientHeight- loginHeight) / 2 + 'px';var oClose = document.getElementById('close');EventUtil.addHandler(oClose, 'click', function(){document.body.removeChild(oMask);document.body.removeChild(oLogin);});EventUtil.addHandler(oMask, 'click', function(){document.body.removeChild(oMask);document.body.removeChild(oLogin);});}window.onload = function(){var oLoginBtn = document.getElementById('login_btn');EventUtil.addHandler(oLoginBtn, "click", popLogin);};</script></head><body><div id="header"><a href="javascript:;" id="login_btn">登錄</a></div><!--<div id="mask"></div>--><!--<div id="login"><div class="title"><span>登錄</span><a href="javascript:;"></a></div><div class="login_content"><form method="post" action="?"><div class="inp_group"><input type="text" name="username" id="username" placeholder="請輸入登錄郵箱"></div><div class="inp_group"><input type="password" name="password" id="passwd" placeholder="請輸入密碼"></div><input type="button" value="登錄"></form></div></div>--></body></html>

代碼到此結束,本文寫的不好,還請各位大俠提出寶貴意見。同時感謝大家一直以來對腳本之間網站的支持,在此,武林網小編祝大家元旦快樂。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 霸州市| 阳泉市| 女性| 惠州市| 南平市| 南陵县| 于田县| 吉安市| 甘德县| 太白县| 读书| 库尔勒市| 丹东市| 民和| 永登县| 淮滨县| 威远县| 屏东市| 长顺县| 鄢陵县| 新营市| 嘉定区| 石渠县| 奎屯市| 黄冈市| 金川县| 台湾省| 纳雍县| 新疆| 大埔县| 屯留县| 吉林市| 涟水县| 从江县| 乾安县| 宾川县| 宣汉县| 敦煌市| 酉阳| 阿克陶县| 汉阴县|