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 相关文章推荐
跨浏览器的设置innerHTML方法
Sep 18 Javascript
JavaScript 编程引入命名空间的方法
Jun 29 Javascript
按给定几率进行随机抽取的js代码
Dec 28 Javascript
Javascript学习笔记-详解in运算符
Sep 13 Javascript
JQuery中使用Ajax赋值给全局变量失败异常的解决方法
Aug 18 Javascript
Node.js事件循环(Event Loop)和线程池详解
Jan 28 Javascript
js基于cookie记录来宾姓名的方法
Jul 19 Javascript
JS轮播图实现简单代码
Feb 19 Javascript
Bootstrap模态对话框中显示动态内容的方法
Aug 10 Javascript
vue-rx的初步使用教程
Sep 21 Javascript
JavaScript数组去重的方法总结【12种方法,号称史上最全】
Feb 28 Javascript
小程序跨页面交互的作用与方法详解
Jan 07 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 self,$this,const,static,-&amp;gt;的使用
2009/10/22 PHP
PHP常用代码大全(新手入门必备)
2010/06/29 PHP
php正则匹配html中带class的div并选取其中内容的方法
2015/01/13 PHP
PHP函数rtrim()使用中的怪异现象分析
2017/02/24 PHP
Laravel 简单实现Ajax滚动加载示例
2019/10/22 PHP
用js实现下载远程文件并保存在本地的脚本
2008/05/06 Javascript
JavaScript 设计模式学习 Singleton
2009/07/27 Javascript
JQuery事件e参数的方法preventDefault()取消默认行为
2013/09/26 Javascript
举例讲解JavaScript substring()的使用方法
2015/11/09 Javascript
javascript中对Date类型的常用操作小结
2016/05/19 Javascript
浅谈JS运算符&amp;&amp;和|| 及其优先级
2016/08/10 Javascript
微信小程序 详解Page中data数据操作和函数调用
2017/01/12 Javascript
关于react-router的几种配置方式详解
2017/07/24 Javascript
JS实现按钮颜色切换效果
2020/09/05 Javascript
Vue实现点击箭头上下移动效果
2020/06/11 Javascript
[00:35]可解锁地面特效
2018/12/20 DOTA
[55:35]DOTA2-DPC中国联赛 正赛 CDEC vs Dragon BO3 第二场 1月22日
2021/03/11 DOTA
python实现电子词典
2020/04/23 Python
使用Python程序抓取新浪在国内的所有IP的教程
2015/05/04 Python
python字符串的常用操作方法小结
2016/05/21 Python
python3 实现口罩抽签的功能
2020/03/11 Python
Python实现UDP程序通信过程图解
2020/05/15 Python
python 实现关联规则算法Apriori的示例
2020/09/30 Python
CSS中越界问题的经典解决方案【推荐】
2016/04/19 HTML / CSS
html5+css3气泡组件的实现
2014/11/21 HTML / CSS
html如何对span设置宽度
2019/10/30 HTML / CSS
GEOX鞋美国官方网站:意大利会呼吸的鞋
2017/07/12 全球购物
Under Armour安德玛中国官网:美国高端运动科技品牌
2018/03/09 全球购物
MYPROTEIN澳大利亚官方网站:欧洲运动营养品牌
2019/06/26 全球购物
工商管理专业职业生涯规划
2014/01/01 职场文书
战友聚会邀请函
2014/01/18 职场文书
农村文化活动总结
2014/08/28 职场文书
先进个人材料怎么写
2014/12/30 职场文书
创业计划书之川味火锅店
2019/09/02 职场文书
阿里云服务器部署mongodb的详细过程
2021/09/04 MongoDB
git中cherry-pick命令的使用教程
2022/06/25 Servers