使用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 相关文章推荐
动态添加js事件实现代码
Mar 12 Javascript
10个基于Jquery的幻灯片插件教程
Oct 29 Javascript
jQuery中:selected选择器用法实例
Jan 04 Javascript
使用postMesssage()实现跨域iframe页面间的信息传递方法
Mar 29 Javascript
浅谈angular懒加载的一些坑
Aug 20 Javascript
Bootstrap显示与隐藏简单实现代码
Mar 06 Javascript
AngularJS中的拦截器实例详解
Apr 07 Javascript
JS如何设置元素样式的方法示例
Aug 28 Javascript
基于JavaScript中字符串的match与replace方法(详解)
Dec 04 Javascript
不到200行 JavaScript 代码实现富文本编辑器的方法
Jan 03 Javascript
Node.js 使用jade模板引擎的示例
May 11 Javascript
jQuery--遍历操作实例小结【后代、同胞及过滤】
May 22 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 is_dir() 判断给定文件名是否是一个目录
2010/05/10 PHP
了解PHP的返回引用和局部静态变量
2015/06/04 PHP
Yii2中简单的场景使用介绍
2017/06/02 PHP
php7下的filesize函数
2019/09/30 PHP
PHP如何开启Opcache功能提升程序处理效率
2020/04/27 PHP
jQuery toggle()设置CSS样式
2009/11/05 Javascript
在javaScript中关于submit和button的区别介绍
2013/10/20 Javascript
node.js实现逐行读取文件内容的代码
2014/06/27 Javascript
DOM基础教程之事件对象
2015/01/20 Javascript
JS实现的简洁二级导航菜单雏形效果
2015/10/13 Javascript
jQuery实现的文字hover颜色渐变效果实例
2016/02/20 Javascript
基于Vue如何封装分页组件
2016/12/16 Javascript
原生js实现吸顶效果
2017/03/13 Javascript
JavaScript中的普通函数和箭头函数的区别和用法详解
2017/03/21 Javascript
Restify中接入Socket.io报Error:Can’t set headers的错误解决
2017/03/28 Javascript
对vue.js中this.$emit的深入理解
2018/02/23 Javascript
bootstrap-table实现表头固定以及列固定的方法示例
2019/03/07 Javascript
vue实现行列转换的一种方法
2019/08/06 Javascript
vue实现输入框自动跳转功能
2020/05/20 Javascript
关于angular引入ng-zorro的问题浅析
2020/09/09 Javascript
[08:40]Navi Vs Newbee
2018/06/07 DOTA
python字符串连接方法分析
2016/04/12 Python
Python函数式编程
2017/07/20 Python
Pandas之Fillna填充缺失数据的方法
2019/06/25 Python
Python文件操作函数用法实例详解
2019/12/24 Python
Python使用Pandas库常见操作详解
2020/01/16 Python
python实现从尾到头打印单链表操作示例
2020/02/22 Python
解决pycharm导入本地py文件时,模块下方出现红色波浪线的问题
2020/06/01 Python
K近邻法(KNN)相关知识总结以及如何用python实现
2021/01/28 Python
SQL中where和having的区别
2012/06/17 面试题
95%的面试官都会问到的50道Java线程题,附答案
2012/08/03 面试题
人力资源管理专业自荐书范文
2014/02/10 职场文书
超市中秋节活动方案
2014/02/12 职场文书
Node与Python 双向通信的实现代码
2021/07/16 Javascript
动画「进击的巨人」第86话播出感谢绘公开
2022/03/21 日漫
SQLServer常见数学函数梳理总结
2022/08/05 MySQL