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 跨浏览器开发经验总结(五) js 事件
May 19 Javascript
Firefox下无法正常显示年份的解决方法
Sep 04 Javascript
详解JavaScript中的客户端消息框架设计原理
Jun 24 Javascript
AngularJS中监视Scope变量以及外部调用Scope方法
Jan 23 Javascript
老生常谈javascript变量的命名规范和注释
Sep 29 Javascript
JavaScript实现多栏目切换效果
Dec 12 Javascript
JS实现控制图片显示大小的方法【图片等比例缩放功能】
Feb 18 Javascript
完美解决mui框架off-canvas侧滑超出部分隐藏无法滚动的问题
Jan 25 Javascript
原生JS进行前后端同构
Apr 22 Javascript
element UI upload组件上传附件格式限制方法
Sep 04 Javascript
vue cli 3.0 搭建项目的图文教程
May 17 Javascript
基于JavaScript实现省市联动效果
Jun 22 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增删改查示例自己写的demo
2013/09/04 PHP
PHP实现的比较完善的购物车类
2014/12/02 PHP
php文件上传简单实现方法
2015/01/24 PHP
利用php + Laravel如何实现部署自动化详解
2017/10/11 PHP
js 上传图片预览问题
2010/12/06 Javascript
在js中判断checkboxlist(.net控件客户端id)是否有选中
2013/04/11 Javascript
jQuery实现可收缩展开的级联菜单实例代码
2013/11/27 Javascript
javascript日期验证之输入日期大于等于当前日期
2015/12/13 Javascript
jQuery增加、删除及修改select option的方法
2016/08/19 Javascript
JS动态给对象添加属性和值的实现方法
2016/10/21 Javascript
Vue组件模板形式实现对象数组数据循环为树形结构(实例代码)
2017/07/31 Javascript
详解新手使用vue-router传参时注意事项
2019/06/06 Javascript
Javascript查看大图功能代码实现
2020/05/07 Javascript
js删除指定位置超链接中含有百度与360的标题
2021/01/06 Javascript
[52:52]DOTA2上海特级锦标赛C组资格赛#1 OG VS LGD第三局
2016/02/27 DOTA
跟老齐学Python之集合的关系
2014/09/24 Python
python检查序列seq是否含有aset中项的方法
2015/06/30 Python
Django自定义过滤器定义与用法示例
2018/03/22 Python
解决pip install xxx报错SyntaxError: invalid syntax的问题
2018/11/30 Python
Python 调用 Windows API COM 新法
2019/08/22 Python
python json load json 数据后出现乱序的解决方案
2020/02/27 Python
浅谈matplotlib中FigureCanvasXAgg的用法
2020/06/16 Python
马来西亚航空官方网站:Malaysia Airlines
2017/07/28 全球购物
彪马英国官网:PUMA英国
2019/02/11 全球购物
大整数数相乘的问题
2012/07/22 面试题
水污染治理工程专业求职信
2014/06/14 职场文书
班级课外活动总结
2014/07/09 职场文书
火锅店的活动方案
2014/08/15 职场文书
2014党员学习习主席讲话思想汇报
2014/09/15 职场文书
2014年辅导员工作总结
2014/11/18 职场文书
旷课检讨书
2015/01/26 职场文书
企业介绍信范文
2015/01/30 职场文书
获奖感言范文
2015/07/31 职场文书
户外拓展训练感想
2015/08/07 职场文书
python中字符串String及其常见操作指南(方法、函数)
2022/04/06 Python
使用python将HTML转换为PDF pdfkit包(wkhtmltopdf) 的使用方法
2022/04/21 Python