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 相关文章推荐
对YUI扩展的Gird组件 Part-2
Mar 10 Javascript
基于jQuery实现的水平和垂直居中的div窗口
Aug 08 Javascript
JQuery select控件的相关操作实现代码
Sep 14 Javascript
jquery绑定事件不生效的解决方法
Feb 11 Javascript
通过url查找a元素应用案例
Apr 29 Javascript
node.js中的http.response.write方法使用说明
Dec 14 Javascript
原生js实现旋转木马轮播图效果
Feb 27 Javascript
JS中实现浅拷贝和深拷贝的代码详解
Jun 05 Javascript
微信小程序拼接图片链接无底洞深入探究
Sep 03 Javascript
js实现整体缩放页面适配移动端
Mar 31 Javascript
详细分析Node.js 多进程
Jun 22 Javascript
js实现翻牌小游戏
Jul 31 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
那些年一起学习的PHP(三)
2012/03/22 PHP
PHP简单创建压缩图的方法
2016/08/24 PHP
PHP + plupload.js实现多图上传并显示进度条加删除实例代码
2017/03/06 PHP
老生常谈ThinkPHP中的行为扩展和插件(推荐)
2017/05/05 PHP
多个Laravel项目如何共用migrations详解
2018/09/25 PHP
PHP实现微信小程序用户授权的工具类示例
2019/03/05 PHP
一个简单的js鼠标划过切换效果
2010/06/30 Javascript
javascript模拟订火车票和退票示例
2014/04/24 Javascript
jquery append()方法与html()方法的区别及使用介绍
2014/08/01 Javascript
jQuery on()方法使用技巧详解
2015/04/16 Javascript
SpringMVC框架下JQuery传递并解析Json格式的数据是如何实现的
2015/12/10 Javascript
JS简单实现String转Date的方法
2016/03/02 Javascript
javascript运算符语法全面概述
2016/07/14 Javascript
PHP抓取HTTPS内容和错误处理的方法
2016/09/30 Javascript
jquery UI Datepicker时间控件冲突问题解决
2016/12/16 Javascript
vue实现ToDoList简单实例
2017/02/07 Javascript
Angular中$state.go页面跳转并传递参数的方法
2017/05/09 Javascript
bootstrap datetimepicker控件位置异常的解决方法
2017/11/23 Javascript
bootstrap table支持高度百分比的实例代码
2018/02/28 Javascript
JavaScript原生数组函数实例汇总
2020/10/14 Javascript
Python中random模块生成随机数详解
2016/03/10 Python
浅谈Python的异常处理
2016/06/19 Python
python使用tkinter实现简单计算器
2018/01/30 Python
利用Python代码实现数据可视化的5种方法详解
2018/03/25 Python
Anaconda下安装mysql-python的包实例
2018/06/11 Python
Python实现多级目录压缩与解压文件的方法
2018/09/01 Python
Python2手动安装更新pip过程实例解析
2020/07/16 Python
Python ConfigParser模块的使用示例
2020/10/12 Python
利用CSS3的定位页面元素
2009/08/29 HTML / CSS
css3翻牌翻数字的示例代码
2020/02/07 HTML / CSS
Html5中localStorage存储JSON数据并读取JSON数据的实现方法
2017/02/13 HTML / CSS
英国家用电器购物网站:Hughes
2018/02/23 全球购物
销售人员自我评价怎么写
2013/09/19 职场文书
食堂采购员岗位职责
2014/03/17 职场文书
股份转让协议书
2014/04/12 职场文书
企业承诺书格式范文
2015/04/28 职场文书