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 相关文章推荐
List Information About the Binary Files Used by an Application
Jun 11 Javascript
js弹窗代码 可以指定弹出间隔
Jul 03 Javascript
jquery可见性过滤选择器使用示例
Jun 24 Javascript
jquery toolbar与网页浮动工具条具体实现代码
Jan 12 Javascript
一个CSS+jQuery实现的放大缩小动画效果
Feb 19 Javascript
基于jQuery实现复选框的全选 全不选 反选功能
Nov 24 Javascript
js实现网站最上边可关闭的浮动广告条代码
Sep 04 Javascript
JavaScript实现的多个图片广告交替显示效果代码
Sep 04 Javascript
分享经典的JavaScript开发技巧
Nov 21 Javascript
完善的jquery处理机制
Feb 21 Javascript
ExtJS 4.2 Grid组件单元格合并的方法
Oct 12 Javascript
微信小程序canvas写字板效果及实例
Jun 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
php字符串过滤与替换小结
2015/01/26 PHP
双冒号 ::在PHP中的使用情况
2015/11/05 PHP
基于jquery的一个简单的脚本验证插件
2010/04/05 Javascript
新浪微博字数统计 textarea字数统计实现代码
2011/08/28 Javascript
Jquery 模拟用户点击超链接或者按钮的方法
2013/10/25 Javascript
js二维数组定义和初始化的三种方法总结
2014/03/03 Javascript
JavaScript组件开发完整示例
2015/12/15 Javascript
js中获取jsp表单中radio类型的值简单实例
2016/08/15 Javascript
BootStrap Validator使用注意事项(必看篇)
2016/09/28 Javascript
js中开关变量使用实例
2017/02/24 Javascript
详解vue渲染从后台获取的json数据
2017/07/06 Javascript
通过jquery.cookie.js实现记住用户名、密码登录功能
2018/06/20 jQuery
layer.open弹层查看缩略图的原图,自适应大小的实例
2019/09/05 Javascript
layer.prompt输入层的例子
2019/09/24 Javascript
浅谈Vue为什么不能检测数组变动
2019/10/14 Javascript
vue+vant-UI框架实现购物车的复选框全选和反选功能
2019/11/05 Javascript
探究python中open函数的使用
2016/03/01 Python
python3实现163邮箱SMTP发送邮件
2018/05/22 Python
Python3实现腾讯云OCR识别
2018/11/27 Python
Python如何筛选序列中的元素的方法实现
2019/07/15 Python
python自动化UI工具发送QQ消息的实例
2019/08/27 Python
PyTorch中的Variable变量详解
2020/01/07 Python
Python基于time模块表示时间常用方法
2020/06/18 Python
如何用python写个模板引擎
2021/01/14 Python
详解CSS3的图层阴影和文字阴影效果使用
2016/06/09 HTML / CSS
Super-Pharm波兰:药房和香水在一个地方
2020/08/18 全球购物
自动化专业个人求职信范文
2013/11/29 职场文书
高三自我评价
2014/02/01 职场文书
电视购物广告词
2014/03/19 职场文书
人事代理委托书
2014/09/27 职场文书
骨干教师个人总结
2015/02/11 职场文书
唐山大地震观后感
2015/06/05 职场文书
2016春季田径运动会广播稿
2015/12/21 职场文书
Django中的JWT身份验证的实现
2021/05/07 Python
python中pandas对多列进行分组统计的实现
2021/06/18 Python
Python Pandas读取Excel日期数据的异常处理方法
2022/02/28 Python