JavaScript编写点击查看大图的页面半透明遮罩层效果实例


Posted in Javascript onMay 09, 2016

 这个效果用的很频繁,经常都会有人问我这个问题,所以要把它写成文章。下次再有人问就直接把这篇文章的URL丢出去就好了。这个效果很简单所以我就不做太多说明了,具体的看看代码注释就会明白。下面就是全部代码,复制到HTML中就可以运行的。

<!DOCTYPE html>
<style>
#mask {
 position:fixed;width:100%;
 top:0px;left:0px;
 _position:absolute;
 _top:expression(documentElement.scrollTop);
 background:rgba(0,0,0,0.5);
 background:transparent\9;
 filter:progid:DXImageTransform.Microsoft.Gradient(
 startColorStr=#80000000,endColorStr=#80000000
 );
 display:none;
}
#mask_td {text-align:center;}
</style>
<img
 src="http://web-tinker.com/images/TheMagicConch.jpg"
 width="100" id="img" 
/>
<table id="mask"><tr><td id="mask_td"></td></tr></table>
<script>
//判断浏览器
var isIE=navigator.userAgent.match(/MSIE (\d)/i);
isIE=isIE?isIE[1]:isIE;
//声明变量
var img,mask;
//获取元素
img=document.getElementById("img");
mask=document.getElementById("mask");
mask.td=document.getElementById("mask_td");
//计算mask的大小
mask.setSize=function(){
 //获取文档可见区域宽度并设置到mask上
 var de=document.documentElement;
 mask.style.width=de.clientWidth+"px"
 mask.style.height=de.clientHeight+"px";
};
//添加show方法
mask.show=function(){
 //隐藏页面的滚动条
 document[
 isIE<9?"documentElement":"body"
 ].style.overflow="hidden";
 //计算mask的大小
 mask.setSize();
 //显示
 mask.style.display=isIE==6?"block":"table";
};
//添加hide方法
mask.hide=function(){
 //显示页面滚动条
 document[
 isIE<9?"documentElement":"body"
 ].style.overflow="";
 //清空里面的内容
 mask.td.innerHTML="";
 //隐藏
 mask.style.display="none";
};
//添加append方法
mask.append=function(e){
 //在mask的TD里面添加内容哦你
 mask.td.appendChild(e);
};
//点击mask关闭
mask.onclick=function(e){
 //判断事件来源,如果是空白区域被点击了就关闭mask
 e=e||event;
 (e.target||e.srcElement)==mask.td&&mask.hide();
};
//窗体大小改变时也改变mask的大小
window.onresize=function(){
 mask.setSize();
};
//点击图片的事件
img.onclick=function(){
 //创建一个图片对象
 var o=new Image;
 //设置图片的地址
 o.src=img.src;
 //在mask内添加内容
 mask.append(o);
 //显示mask
 mask.show();
};
</script>

这个效果是没有什么难点了,最困难的也许就是半透明的实现了吧。CSS3的opacity和IE的alpha都可以实现半透明,但是那是整个元素的半透明。使用那种方法就意味着子元素也被半透明了,所以我们必须把透明设置到背景上,而不是整个元素上。CSS3中可以直接使用rgba来设置。IE中没有这样的方法,但是可以使用渐变滤镜来代替它,因为渐变滤镜也是支持透明的。还有,在IE9中,同时兼容CSS3的透明和滤镜的透明,如果两个都使用,页面的透明度就会不对。所以我们在IE9中屏蔽了其中一种透明效果。

还有一点问题就是兼容IE6的,IE6不支持fixed所以我们需要使用absolute和动态设置top来兼容它。然后就是mask的大小计算问题,这个也存在一个浏览器差异,其实这个效果中的浏览器差异问题还是挺大的,不过都是一些小问题看到了就会明白没有长篇大论的必要。

Javascript 相关文章推荐
通过javascript设置css属性的代码
Dec 28 Javascript
JS小功能(列表页面隔行变色)简单实现
Nov 28 Javascript
jquery validate添加自定义验证规则(验证邮箱 邮政编码)
Dec 04 Javascript
js弹出div并显示遮罩层
Feb 12 Javascript
JQuery实现可直接编辑的表格
Apr 16 Javascript
JS实现统计复选框选中个数并提示确定与取消的方法
Jul 01 Javascript
javascript下使用Promise封装FileReader
Feb 19 Javascript
底部悬浮通栏可以关闭广告位的实现方法
Jun 01 Javascript
再次谈论Javascript中的this
Jun 23 Javascript
将List对象列表转换成JSON格式的类实现方法
Jul 04 Javascript
简述vue中的config配置
Jan 23 Javascript
Vue实现调节窗口大小时触发事件动态调节更新组件尺寸的方法
Sep 15 Javascript
使用CSS+JavaScript或纯js实现半透明遮罩效果的实例分享
May 09 #Javascript
Bootstrap模仿起筷首页效果
May 09 #Javascript
基于jquery实现智能表单验证操作
May 09 #Javascript
基于jquery实现表格内容筛选功能实例解析
May 09 #Javascript
Bootstrap富文本组件wysiwyg数据保存到mysql的方法
May 09 #Javascript
如何让一个json文件显示在表格里【实现代码】
May 09 #Javascript
JavaScript 函数的执行过程
May 09 #Javascript
You might like
轻松入门: 煮好咖啡的七个诀窍
2021/03/03 冲泡冲煮
解决phpmyadmin中缺少mysqli扩展问题的方法
2013/05/06 PHP
php实现批量上传数据到数据库(.csv格式)的案例
2017/06/18 PHP
javascript检测页面是否缩放的小例子
2013/05/16 Javascript
JSON中双引号的轮回使用过程中一定要小心
2014/03/05 Javascript
jQuery中;function($,undefined) 前面的分号的用处
2014/12/17 Javascript
详解JavaScript对Date对象的操作问题(生成一个倒数7天的数组)
2015/10/01 Javascript
Jquery 效果使用详解
2015/11/23 Javascript
通过隐藏iframe实现无刷新上传文件操作
2016/03/16 Javascript
AngularJS中的指令全面解析(必看)
2016/05/20 Javascript
jQuery限制图片大小的方法
2016/05/25 Javascript
JS实现焦点图轮播效果的方法详解
2016/12/19 Javascript
JS正则子匹配实例分析
2016/12/22 Javascript
详解vue项目的构建,打包,发布全过程
2017/11/23 Javascript
vue自定义指令实现仅支持输入数字和浮点型的示例
2019/10/30 Javascript
Python os模块介绍
2014/11/30 Python
Python正则表达式完全指南
2017/05/25 Python
Python numpy 常用函数总结
2017/12/07 Python
python3.6 实现AES加密的示例(pyCryptodome)
2018/01/10 Python
python学习入门细节知识点
2018/03/29 Python
Pandas 数据处理,数据清洗详解
2018/07/10 Python
详解python while 函数及while和for的区别
2018/09/07 Python
python实现可逆简单的加密算法
2019/03/22 Python
Django框架orM与自定义SQL语句混合事务控制操作
2019/06/27 Python
Jupyter Notebook远程登录及密码设置操作
2020/04/10 Python
Pandas之read_csv()读取文件跳过报错行的解决
2020/04/21 Python
美国本地交易和折扣网站:LocalFlavor.com
2017/10/26 全球购物
荷兰音乐会和音乐剧门票订购网站:Topticketshop
2019/08/27 全球购物
英国DVD和蓝光碟片购买网站:Zoom.co.uk(电影和电视)
2019/09/23 全球购物
一道Delphi面试题
2016/10/28 面试题
让世界充满爱演讲稿
2014/05/24 职场文书
供用电专业求职信
2014/07/07 职场文书
2016春节慰问信范文
2015/03/25 职场文书
2015年药房工作总结
2015/04/25 职场文书
2015年防汛工作总结
2015/05/15 职场文书
字典算法实现及操作 --python(实用)
2021/03/31 Python