很多时候我们想去某某网站干点什么的时候,就会让我们先注册登录后才可以访问内容,而现在很多网站注册登录的时候都会有一种遮罩层的效果,就是背景是带有透明度的黑色遮罩,盖满整个网站,然后登录框弹出固定在屏幕的居中位置。那么,今天就练练这个实用而简单的效果吧。PS:这个是我学习后练习的demo!

首先,需要有一个按钮来模拟登录:

  1. <button id="btnLogin"class="login-btn">登录</button>

然后呢,我们想通过点击这个按钮实现这样一个效果:

从上面这张图片,我们可以看到,灰色背景就是遮罩层,而浅蓝色的区域就是登陆框位置所在了。OK,下面先看一下HTML结构和css样式:

  1. <div id="mask"></div> //遮罩层
  2. <div id="login"> //登陆框包裹层
  3. <div id="loginCon"> //表单内容
  4. <div id="close">点击关闭</div> //关闭按钮
  5. 我是登录框哟!
  6. </div>
  7. </div>

这里只是将HTML结构拿出来讲一下,但是下面我们是通过JS来创建它们的,所以这里只是为了方便我们理解,并不需要放在html文件里。

CSS样式:

  1. #close{
  2. background:url(img/close.png) no-repeat;
  3. width:30px;
  4. height:30px;
  5. cursor:pointer;
  6. position:absolute;
  7. right:5px;
  8. top:5px;
  9. text-indent:-999em;
  10. }
  11. #mask{
  12. background-color:#ccc;
  13. opacity:0.7;
  14. filter: alpha(opacity=70);
  15. position:absolute;
  16. left:;
  17. top:;
  18. z-index:;
  19. }
  20. #login{
  21. position:fixed;
  22. z-index:;
  23. }
  24. .loginCon{
  25. position:relative;
  26. width:670px;
  27. height:380px;
  28. background:lightblue;
  29. border:3px solid #333;
  30. text-align: center;
  31. }

css样式中需要注意一下z-index属性,因为我们需要让遮罩层盖住除了登录框之外所有的页面内容,所以,需要确保登录框的层次最高,遮罩层次之,所以一般将这两个的z-index属性值设置为比较高的数值,但遮罩层要比登陆框少一层。然后还有一点就是遮罩层必须设置透明度,不然就太难看了,用户体验极其不好!

JS实现代码:

  1. function dialog(){
  2. //获取页面的高度和宽度
  3. var sWidth=document.body.scrollWidth || document.documentElement.scrollWidth;
  4. var sHeight=document.body.scrollHeight || document.documentElement.scrollHeight;
  5.  
  6. //获取页面的可视区域高度和宽度
  7. var wHeight=document.documentElement.clientHeight || document.body.clientHeight;
  8.  
  9. //创建遮罩层
  10. var oMask=document.createElement("div");
  11. oMask.id="mask";
  12. oMask.style.height=sHeight+"px";
  13. oMask.style.width=sWidth+"px";
  14. document.body.appendChild(oMask); //添加到body末尾
  15.  
  16. //创建登录框
  17. var oLogin=document.createElement("div");
  18. oLogin.id="login";
  19. oLogin.innerHTML="<div class='loginCon'><div id='close'>点击关闭</div>我是登录框哟!</div>";
  20. document.body.appendChild(oLogin);
  21.  
  22. //获取登陆框的宽和高
  23. var dHeight=oLogin.offsetHeight;
  24. var dWidth=oLogin.offsetWidth;
  25.  
  26. //设置登陆框的left和top
  27. oLogin.style.left=sWidth/2-dWidth/2+"px";
  28. oLogin.style.top=wHeight/2-dHeight/2+"px";
  29.  
  30. //获取关闭按钮
  31. var oClose=document.getElementById("close");
  32.  
  33. //点击关闭按钮和点击登陆框以外的区域都可以关闭登陆框
  34. oClose.onclick=oMask.onclick=function(){
  35. document.body.removeChild(oLogin);
  36. document.body.removeChild(oMask);
  37. };
  38. }
  39.  
  40. window.onload=function(){
  41. var oBtn=document.getElementById("btnLogin");
  42. //点击登录按钮
  43. oBtn.onclick=function(){
  44. dialog();
  45. }
  46.  
  47. }

这种方法是通过JS在事件绑定里动态创建和移除这些标签,然后设置他们的 id 和 style 属性。当然,我们也可以将HTML结构先放在html文件里,默认情况下隐藏它们,然后在事件绑定里控制它们的显示与隐藏即可!

JS实现弹出层效果的更多相关文章

  1. js 实现弹出层效果

    代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <tit ...

  2. Fancybox丰富的弹出层效果

    Fancybox是一款优秀的jquery插件,它能够展示丰富的弹出层效果.前面我们有文章介绍了facybox弹出层效果,相比facybox,fancybox显得功能更为齐全,它除了可以加载DIV,图片 ...

  3. js简单弹出层、遮罩层

    <html> <head> <title>js简单弹出层</title> <style> /*阴影边框效果*/ .box-shadow-1 ...

  4. [转]jquery Fancybox丰富的弹出层效果

    本文转自:http://www.helloweba.com/view-blog-65.html Fancybox是一款优秀的jquery插件,它能够展示丰富的弹出层效果.前面我们有文章介绍了facyb ...

  5. js插件---弹出层sweetalert2(总结)

    js插件---弹出层sweetalert2(总结) 一.总结 一句话总结: sweetalert2的效果非常好,效果比较Q萌,移动端适配也比较好,感觉比layer.js效果好点 1.SweetAler ...

  6. 使用movable-view制作可拖拽的微信小程序弹出层效果。

    仿了潮汐睡眠小程序的代码.[如果有侵权联系删除 最近做的项目有个弹出层效果,类似音乐播放器那种.按照普通的做了一般感觉交互不是很优雅,设计妹子把潮汐睡眠的弹层给我看了看,感觉做的挺好,于是乘着有空仿照 ...

  7. 使用JavaScript实现弹出层效果

    声明 阅读本文需要有一定的HTML.CSS和JavaScript基础 设计 实现弹出层效果的思路非常简单:将待显示的内容先隐藏,在触发某种条件后(如点击按钮),将原本隐藏的内容显示出来. 实现 < ...

  8. jQuery WIN 7透明弹出层效果

    jQuery WIN 7透明弹出层效果,点击可以弹出一个透明层的jquery特效,插件可以调弹出框的宽度和高度,很不错的一个弹出层插件. 适用浏览器:IE8.360.FireFox.Chrome.Sa ...

  9. 改善用户体验之wordpress添加图片弹出层效果 (插件 FancyBox)

    下面说说在改善用户体验之wordpress添加图片弹出层效果.效果图如下:   像这篇文章如何在百度搜索结果中显示网站站点logo? 文章内有添加图片,没加插件之前用户点击图片时,是直接_black打 ...

随机推荐

  1. 微信Android热补丁实践演进之路

    版权声明:本文由张绍文原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/81 来源:腾云阁 https://www.qclou ...

  2. 学习POC框架pocsuite--编写hellowordPOC

    在这里,首先向安全圈最大的娱乐公司,某404致敬. 参考博文 https://www.seebug.org/help/dev 向seebug平台及该文原作者致敬,虽然并不知道是谁 长话短说其实,可自由 ...

  3. 如何设置Eclipse工作区默认编辑宽度

    1)打开Window  => Preferences窗口 2)打开Formatter属性页从Java => CodeStyle => Formatter 3) 单击New创建一个自己 ...

  4. Oracle入门笔记 ——启动进阶

    1.2 进阶内容: 两个概念:SCN 和 检查点  1.SCN的定义:     system change member ,系统改变号,是数据库中非常重要的一个数据结构.     SCN 用以标示数据 ...

  5. ionic开发过程中遇到的一些坑!

    总结一些:在使用 ionic 开发过程中所遇到的问题. 问题一:Cannot find module '@ionic/app-scripts' 描述:使用 ionic start 项目的时候,项目安装 ...

  6. SVN创建主干,分支、合并分支

    1.创建主干(trunk) 本文承接上文部分内容:http://www.cnblogs.com/dadonggg/p/8383696.html:部分不明,可以访问这篇文章. 当我们创建完代码仓库后,创 ...

  7. CH601后缀数组【Trie树】

    内含字典树创建及查询模板 1601 前缀统计 0x10「基本数据结构」例题 描述 给定N个字符串S1,S2...SN,接下来进行M次询问,每次询问给定一个字符串T,求S1-SN中有多少个字符串是T的前 ...

  8. codeforces#505--C Plasticine Zebra

    C. Plasticine zebra time limit per test 1 second memory limit per test 256 megabytes input standard ...

  9. SQL---->mySQl卸载for mac

    因为装的时候弄坏了 先来学习下怎么卸载吧,如下输入终端就好了 cd ~/ sudo rm /usr/local/mysql sudo rm -rf /usr/local/mysql* sudo rm ...

  10. spring boot实战(第一篇)第一个案例

    版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[+]   spring boot实战(第一篇)第一个案例 前言 写在前面的话 一直想将spring boot相关内容写成一个系列的 ...