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小技巧 2.5 则
Sep 12 Javascript
JavaScript中的变量声明早于赋值分析
Mar 01 Javascript
Jquery右下角抖动、浮动 实例代码(兼容ie6、FF)
Aug 15 Javascript
jQuery使用drag效果实现自由拖拽div
Jun 11 Javascript
使用canvas实现仿新浪微博头像截取上传功能
Sep 02 Javascript
js实现网站最上边可关闭的浮动广告条代码
Sep 04 Javascript
悬浮广告方法日常收集整理
Mar 18 Javascript
jQuery each函数源码分析
May 25 Javascript
JS实现图片预加载之无序预加载功能代码
May 12 Javascript
深究AngularJS中ng-drag、ng-drop的用法
Jun 12 Javascript
javascript  删除select中的所有option的实例
Sep 17 Javascript
linux 后台运行node服务指令方法
May 23 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
ThinkPHP3.1新特性之动态设置自动完成和自动验证示例
2014/06/19 PHP
php中mt_rand()随机数函数用法
2014/11/24 PHP
通过修改配置真正解决php文件上传大小限制问题(nginx+php)
2015/09/23 PHP
浅谈php和js中json的编码和解码
2016/10/24 PHP
解析JavaScript中的标签语句
2013/06/19 Javascript
HTML页面滚动时获取离页面顶部的距离2种实现方法
2013/09/05 Javascript
JavaScript中几种排序算法的简单实现
2015/07/29 Javascript
Json对象和字符串互相转换json数据拼接和JSON使用方式详细介绍(小结)
2016/10/25 Javascript
Bootstrap中定制LESS-颜色及导航条(推荐)
2016/11/21 Javascript
jQuery插件zTree实现获取当前选中节点在同级节点中序号的方法
2017/03/08 Javascript
jQuery实现IE输入框完成placeholder标签功能的方法
2017/09/20 jQuery
weebox弹出窗口不居中显示的解决方法
2017/11/27 Javascript
JS实现匀速与减速缓慢运动的动画效果封装示例
2018/08/27 Javascript
JQuery的加载和选择器用法简单示例
2019/05/13 jQuery
VUE:vuex 用户登录信息的数据写入与获取方式
2019/11/11 Javascript
JSON获取属性值方法代码实例
2020/06/30 Javascript
用Nodejs实现在终端中炒股的实现
2020/10/18 NodeJs
[50:05]VGJ.S vs OG 2018国际邀请赛淘汰赛BO3 第二场 8.22
2018/08/23 DOTA
python实现批量改文件名称的方法
2015/05/25 Python
在Python的Django框架下使用django-tagging的教程
2015/05/30 Python
Python 多线程实例详解
2017/03/25 Python
5款非常棒的Python工具
2018/01/05 Python
Python实现图片裁剪的两种方式(Pillow和OpenCV)
2019/10/30 Python
python文字转语音的实例代码分析
2019/11/12 Python
从numpy数组中取出满足条件的元素示例
2019/11/26 Python
PyTorch加载预训练模型实例(pretrained)
2020/01/17 Python
Python基于Tkinter编写crc校验工具
2020/05/06 Python
使用python创建生成动态链接库dll的方法
2020/05/09 Python
AmazeUi Tree(树形结构) 应用小结
2020/08/17 HTML / CSS
英国领先的在线高尔夫商店:Gamola Golf
2019/11/16 全球购物
马来西亚在线药房:RoyalePharma
2019/12/01 全球购物
Athleta官网:购买女士瑜伽服、技术运动服和休闲运动服
2020/11/12 全球购物
珍惜资源的建议书
2014/08/26 职场文书
忠犬八公的故事观后感
2015/06/05 职场文书
怎样评估创业计划书是否有可行性?
2019/08/07 职场文书
Nginx下SSL证书安装部署步骤介绍
2021/12/06 Servers