使用jQuery制作遮罩层弹出效果的极简实例分享


Posted in Javascript onMay 12, 2016

客户的网站上突然需要一个遮罩弹窗效果,也可以称作暗箱之类的,具体效果就是网页中背景变成半透明,然后在屏幕中间出现一个菜单之类的东西。这种效果在网上很常见,例如:QQ空间浏览相册等。这种效果的好处就是,可以让用户聚焦到弹出的菜单中。

神说,有代码的文章,应该有个 Demo ,于是就有了Demo。

HTML 结构

首先先来分析一下这个过程:触发某个事件(例如点击按钮),然后出现一个背景遮罩上面还有一个内容层。触发的按钮,我在这里用 div 来代替,并且使用 click 点击事件来演示。那么我们的 HTML 结构就很明确了。

<div class="click">点击这里</div>
 <div class="click1">效果增强版的</div>
 <div class="bg"></div>
 <div class="content">这里是正文内容</div>

CSS 代码

对于遮罩效果的 CSS 代码是最关键的。遮罩用到了两个 div ,一个作为背景,要覆盖整个网页,另一个是内容显示层,通常要居中处理。

.bg{display:none;position:fixed;width:100%;height:100%;background:#000;z-index:2;top:0;left:0;opacity:0.7;}
.content{display:none;width:500px;height:300px;position:fixed;top:50%;margin-top:-150px;background:#fff;z-index:3;left:50%;margin-left:-250px;}

简单解释一下,首先要隐藏起来,之后用 jQuery 触发显示。之后指定 position 的属性为 fixed,因为这样,才能激活 top 、left 、bottom 、right 、z-index这些属性,同时可以设置 width 、height 为 100% 来实现覆盖整个网页。通常情况下,一般用 absolute 属性值来实现这种效果,因为它的兼容性更好。但是在实际应用当中,当页面很长,往下滚动的时候,使用 absolute 遮罩层也会跟随滚动。对于内容层来说,比较简单,指定宽度和高度用负边距来使其居中显示。
特别要注意一点,背景层的半透明使用的是 opacity 属性,因为使用这个属性可以更好的用 jQuery 来控制。但是 fixed 、opacity 都是早期 IE 浏览器不支持的。

jQuery 代码

分析一下遮罩的交互操作,无非就是点击弹出,然后点击一下遮罩,消失。那么就直接对 CSS 进行操作即可。

$(function(){
  $(‘.click').click(function(){
   $(‘.bg').css({‘display':'block'});
   $(‘.content').css({‘display':'block'});
  });
  $(‘.bg').click(function(){
   $(‘.bg').css({‘display':'none'});
   $(‘.content').css({‘display':'none'});
  });
 });

这里直接使用 CSS 方法,当点击的时候改变 display 属性,此外还有很多实现方法,不再赘述。完成这些,当我们点击“点击这里”之后,就可以看到效果了。
更多技巧和方法

更平缓的显示:

点击之后,突然出现并不是一个好方法。所以我又增加了一个按钮,点击之后通过 fadeIn、fadeOut 方法来控制渐隐。

$(‘.click1').click(function(){
 $(‘.bg').fadeIn(200);
 $(‘.content').fadeIn(400);
 });
 $(‘.bg').click(function(){
 $(‘.bg').fadeOut(800);
 $(‘.content').fadeOut(800);
 });

这样简单的方法,就增强了用户体验。当然,还有一些更高级的效果可以实现。

Javascript 相关文章推荐
分享一个asp.net pager分页控件
Jan 04 Javascript
js实现俄罗斯方块小游戏分享
Jan 31 Javascript
javascript中的括号()用法小结
Apr 14 Javascript
require.js的用法详解
Oct 20 Javascript
Javascript 计算字符串在localStorage中所占字节数
Oct 21 Javascript
浅谈JS原型对象和原型链
Mar 02 Javascript
Javascript缓存API
Jun 14 Javascript
codeMirror插件使用讲解
Jan 16 Javascript
解决Vue编译时写在style中的路径问题
Sep 21 Javascript
原生js实现可兼容PC和移动端的拖动滑块功能详解【测试可用】
Aug 15 Javascript
VScode格式化ESlint方法(最全最好用方法)
Sep 10 Javascript
9种方法优化jQuery代码详解
Feb 04 jQuery
JS函数的定义与调用方法推荐
May 12 #Javascript
使用jQuery实现Web页面换肤功能的要点解析
May 12 #Javascript
JS定义类的六种方式详解
May 12 #Javascript
值得分享和收藏的Bootstrap学习教程
May 12 #Javascript
jQuery中$.each()函数的用法引申实例
May 12 #Javascript
判断JS对象是否拥有某属性的方法推荐
May 12 #Javascript
JavaScript的模块化开发框架Sea.js上手指南
May 12 #Javascript
You might like
探讨捕获php错误信息方法的详解
2013/06/09 PHP
php采用curl模仿登录人人网发布动态的方法
2014/11/07 PHP
thinkPHP使用pclzip打包备份mysql数据库的方法
2016/04/30 PHP
详解PHP处理密码的几种方式
2016/11/30 PHP
laravel 配置路由 api和web定义的路由的区别详解
2019/09/03 PHP
利用PHP内置SERVER开启web服务(本地开发使用)
2021/03/09 PHP
Mootools 1.2教程 Tooltips
2009/09/15 Javascript
js字符串转成JSON
2013/11/07 Javascript
jQuery中serializeArray()与serialize()的区别实例分析
2015/12/09 Javascript
javascript定时器取消定时器及优化方法
2017/07/08 Javascript
react native与webview通信的示例代码
2017/09/25 Javascript
解决vue项目中type=”file“ change事件只执行一次的问题
2018/05/16 Javascript
JS实现点击按钮可实现编辑功能
2018/07/03 Javascript
jQuery的ztree仿windows文件新建和拖拽功能的实现代码
2018/12/05 jQuery
Vue.js实现备忘录功能
2019/06/26 Javascript
微信sdk实现禁止微信分享(使用原生php实现)
2019/11/15 Javascript
JS+JQuery实现无缝连接轮播图
2020/12/30 jQuery
Python实现约瑟夫环问题的方法
2016/05/03 Python
Python实现Linux的find命令实例分享
2017/06/04 Python
Python3利用Dlib实现摄像头实时人脸检测和平铺显示示例
2019/02/21 Python
Python 字符串处理特殊空格\xc2\xa0\t\n Non-breaking space
2020/02/23 Python
Python中的流程控制详解
2021/02/18 Python
世界最大的票务市场:viagogo
2017/02/16 全球购物
Laura Mercier官网:彩妆大师罗拉玛斯亚的化妆品牌
2018/01/04 全球购物
美国儿童珠宝在线零售商:Loveivy
2019/05/22 全球购物
如何查看在weblogic中已经发布的EJB
2012/06/01 面试题
师范毕业生个人求职信
2013/12/09 职场文书
《花木兰》教学反思
2014/04/09 职场文书
机电专业毕业生求职信
2014/07/01 职场文书
交通局领导班子群众路线教育实践活动对照检查材料思想汇报
2014/10/09 职场文书
社区务虚会发言材料
2014/10/20 职场文书
四风专项整治工作情况汇报
2014/10/28 职场文书
2014年青年教师工作总结
2014/12/17 职场文书
yyds什么意思?90后已经听不懂00后讲话了……
2022/02/03 杂记
Nginx本地配置SSL访问的实例教程
2022/05/30 Servers
nginx sticky实现基于cookie负载均衡示例详解
2022/12/24 Servers