使用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表单验证代码(包括例子)
Nov 11 Javascript
JavaScript 上万关键字瞬间匹配实现代码
Jul 07 Javascript
js 获取、清空input type=&quot;file&quot;的值示例代码
Feb 19 Javascript
关于Javascript加载执行优化的研究报告
Dec 16 Javascript
JavaScript按值删除数组元素的方法
Apr 24 Javascript
详解JavaScript中的事件流和事件处理程序
May 20 Javascript
vue实现ajax滚动下拉加载,同时具有loading效果(推荐)
Jan 11 Javascript
微信小程序中hidden不生效原因的解决办法
Apr 26 Javascript
Bootstrap与Angularjs的模态框实例代码
Aug 03 Javascript
详谈Node.js之操作文件系统
Aug 29 Javascript
微信小程序如何获取群聊的openGid以及名称详解
Jul 17 Javascript
解决vue中axios设置超时(超过5分钟)没反应的问题
Sep 04 Javascript
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
用mysql内存表来代替php session的类
2009/02/01 PHP
php自动加载的两种实现方法
2010/06/21 PHP
php下网站防IP攻击代码,超级实用
2010/10/24 PHP
PHP简单实现生成txt文件到指定目录的方法
2016/04/25 PHP
[原创]php简单防盗链验证实现方法
2016/07/09 PHP
使用PHP+MySql实现微信投票功能实例代码
2017/09/29 PHP
三个思路解决laravel上传文件报错:413 Request Entity Too Large问题
2017/11/13 PHP
PHP文件上传小程序 适合初学者学习!
2019/05/23 PHP
firefox插件Firebug的使用教程
2010/01/02 Javascript
NodeJS 模块开发及发布详解分享
2012/03/07 NodeJs
JavaScript使用yield模拟多线程的方法
2015/03/19 Javascript
Eclipse编辑jsp、js文件时卡死现象的解决办法汇总
2016/02/02 Javascript
jquery解析XML及获取XML节点名称的实现代码
2016/05/18 Javascript
AngularJS基础 ng-cloak 指令简单示例
2016/08/01 Javascript
详解浏览器渲染页面过程
2017/02/09 Javascript
深入理解Angular4中的依赖注入
2017/06/07 Javascript
文本溢出插件jquery.dotdotdot.js使用方法详解
2017/06/22 jQuery
javascript实现Java中的Map对象功能的实例详解
2017/08/21 Javascript
Angularjs中数据绑定的实例详解
2017/08/25 Javascript
JavaScript之创意时钟项目(实例讲解)
2017/10/23 Javascript
微信小程序按顺序同步执行的两种方式
2019/12/20 Javascript
[02:00]DOTA2英雄COSPLAY闹市街头巡游助威2015国际邀请赛
2015/08/02 DOTA
python实现简单聊天应用 python群聊和点对点均实现
2017/09/14 Python
python利用paramiko连接远程服务器执行命令的方法
2017/10/16 Python
python 读取Linux服务器上的文件方法
2018/12/27 Python
Django 开发环境配置过程详解
2019/07/18 Python
Pytorch 实现权重初始化
2019/12/31 Python
Python fileinput模块如何逐行读取多个文件
2020/10/05 Python
Belle Maison倍美丛官网:日本千趣会旗下邮购网站
2016/07/22 全球购物
牵手50台湾:专为黄金岁月的单身人士而设的交友网站
2021/02/18 全球购物
会计找工作求职信范文
2013/12/09 职场文书
委托书怎么写
2014/07/31 职场文书
监察局领导班子四风问题整改措施思想汇报
2014/10/05 职场文书
晚会闭幕词
2015/01/28 职场文书
java设计模式--三种工厂模式详解
2021/07/21 Java/Android
golang生成vcf通讯录格式文件详情
2022/03/25 Golang