本文摘自PHP中文网,作者青灯夜游,侵删。

很多时候我们想去某某网站干点什么的时候,就会让我们先注册登录后才可以访问内容,而现在很多网站注册登录的时候都会有一种遮罩层的效果,就是背景是带有透明度的黑色遮罩,盖满整个网站,然后登录框弹出固定在屏幕的居中位置。那么,今天就练练这个实用而简单的效果吧。PS:这个是我学习后练习的demo!
首先,需要有一个按钮来模拟登录:
1 | <button id= "btnLogin" class = "login-btn" >登录</button>
|
![3W$VBSJ3]ZC`V0D7$NM5_TS 3W$VBSJ3]ZC`V0D7$NM5_TS](http://ypimg.muzhuangnet.com/Collect/csharp/upload/article/000/000/024/07c81c7be4c194a1499a6a943ac371b1-0.png)
然后呢,我们想通过点击这个按钮实现这样一个效果:

从上面这张图片,我们可以看到,灰色背景就是遮罩层,而浅蓝色的区域就是登陆框位置所在了。OK,下面先看一下HTML结构和css样式:
1 2 3 4 5 6 7 | <div id= "mask" ></div>
<div id= "login" >
<div id= "loginCon" >
<div id= "close" >点击关闭</div>
我是登录框哟!
</div>
</div>
|
这里只是将HTML结构拿出来讲一下,但是下面我们是通过JS来创建它们的,所以这里只是为了方便我们理解,并不需要放在html文件里。
CSS样式:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | #close{
background:url(img/close.png) no-repeat;
width:30px;
height:30px;
cursor:pointer;
position:absolute;
right:5px;
top:5px;
text-indent:-999em;
}
#mask{
background-color:#ccc;
opacity:0.7;
filter: alpha(opacity=70);
position:absolute;
left:0;
top:0;
z-index:1000;
}
#login{
position:fixed;
z-index:1001;
}
.loginCon{
position:relative;
width:670px;
height:380px;
background:lightblue;
border:3px solid #333;
text-align: center;
}
|
css样式中需要注意一下z-index属性,因为我们需要让遮罩层盖住除了登录框之外所有的页面内容,所以,需要确保登录框的层次最高,遮罩层次之,所以一般将这两个的z-index属性值设置为比较高的数值,但遮罩层要比登陆框少一层。然后还有一点就是遮罩层必须设置透明度,不然就太难看了,用户体验极其不好!
JS实现代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | function dialog(){
var sWidth=document.body.scrollWidth || document.documentElement.scrollWidth;
var sHeight=document.body.scrollHeight || document.documentElement.scrollHeight;
var wHeight=document.documentElement.clientHeight || document.body.clientHeight;
var oMask=document.createElement( "div" );
oMask.id= "mask" ;
oMask.style.height=sHeight+ "px" ;
oMask.style.width=sWidth+ "px" ;
document.body.appendChild(oMask);
var oLogin=document.createElement( "div" );
oLogin.id= "login" ;
oLogin.innerHTML= "<div class='loginCon'><div id='close'>点击关闭</div>我是登录框哟!</div>" ;
document.body.appendChild(oLogin);
var dHeight=oLogin.offsetHeight;
var dWidth=oLogin.offsetWidth;
oLogin.style.left=sWidth/2-dWidth/2+ "px" ;
oLogin.style.top=wHeight/2-dHeight/2+ "px" ;
var oClose=document.getElementById( "close" );
oClose.onclick=oMask.onclick= function (){
document.body.removeChild(oLogin);
document.body.removeChild(oMask);
};
}
window.onload= function (){
var oBtn=document.getElementById( "btnLogin" );
oBtn.onclick= function (){
dialog();
}
}
|
这种方法是通过JS在事件绑定里动态创建和移除这些标签,然后设置他们的 id 和 style 属性。当然,我们也可以将HTML结构先放在html文件里,默认情况下隐藏它们,然后在事件绑定里控制它们的显示与隐藏即可!
更多弹出层特效代码,请访问:js代码特效 栏目
以上就是javascript如何实现弹出层效果?(代码分析)的详细内容,更多文章请关注木庄网络博客!
相关阅读 >>
javascript语法是什么
一纸搞懂js系列(1)之编译原理,作用域,作用域链,变量提升,暂时性死区
javascript控制台console对象的方法有哪些
javascript如何添加节点
javascript函数式编程中纯函数的理解(代码)
javascript用什么存储数据
javascript中常量和变量的区别是什么
javascript中使用for...in 和object.keys()枚举对象属性的差异(附代码)
移动端全景装修图的实现实例分享
javascript如何输入数据
更多相关阅读请进入《javascript》频道 >>
人民邮电出版社
本书对 Vue.js 3 技术细节的分析非常可靠,对于需要深入理解 Vue.js 3 的用户会有很大的帮助。——尤雨溪,Vue.js作者
转载请注明出处:木庄网络博客 » javascript如何实现弹出层效果?(代码分析)