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 相关文章推荐
js树形控件脚本代码
Jul 24 Javascript
Javascript中Array.prototype.map()详解
Oct 22 Javascript
js计算文本框输入的字符数
Oct 23 Javascript
基于Bootstrap使用jQuery实现简单可编辑表格
May 04 Javascript
JavaScript实现通过select标签跳转网页的方法
Sep 29 Javascript
JS中闭包的经典用法小结(2则示例)
Dec 28 Javascript
Webpack框架核心概念(知识点整理)
Dec 22 Javascript
使用ECharts实现状态区间图
Oct 25 Javascript
其实你可以少写点if else与switch(推荐)
Jan 10 Javascript
vue2.0+vue-router构建一个简单的列表页的示例代码
Feb 13 Javascript
使用vue完成微信公众号网页小记(推荐)
Apr 28 Javascript
使vue实现jQuery调用的两种方法
May 12 jQuery
使用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
比特率,大家看看这个就不用收音机音质去比MP3音质了
2021/03/01 无线电
PHP安全配置
2006/12/06 PHP
PHP5+UTF8多文件上传类
2008/10/17 PHP
PHP JSON格式的中文显示问题解决方法
2015/04/09 PHP
php 删除一维数组中某一个值元素的操作方法
2018/02/01 PHP
修改Laravel自带的认证系统的User类的命名空间的步骤
2019/10/15 PHP
tp5.1框架数据库子查询操作实例分析
2020/05/26 PHP
JS操作Cookies的小例子
2013/10/15 Javascript
学习JavaScript设计模式(接口)
2015/11/26 Javascript
js+css实现回到顶部按钮(back to top)
2016/03/02 Javascript
JS代码随机生成姓名、手机号、身份证号、银行卡号
2016/04/27 Javascript
微信小程序链接传参并跳转新页面
2016/11/29 Javascript
JS+HTML5 FileReader对象用法示例
2017/04/07 Javascript
vue Element-ui input 远程搜索与修改建议显示模版的示例代码
2017/10/19 Javascript
Vue 实现拖动滑块验证功能(只有css+js没有后台验证步骤)
2018/08/24 Javascript
详解如何用VUE写一个多用模态框组件模版
2018/09/27 Javascript
使用wxapp-img-loader自定义组件实现微信小程序图片预加载功能
2018/10/18 Javascript
Three.js实现简单3D房间布局
2018/12/30 Javascript
微信小程序和百度的语音识别接口详解
2019/05/06 Javascript
Javascript三种字符串连接方式及性能比较
2019/05/28 Javascript
vue中更改数组中属性,在页面中不生效的解决方法
2019/10/30 Javascript
关于vue利用postcss-pxtorem进行移动端适配的问题
2019/11/20 Javascript
el-form 多层级表单的实现示例
2020/09/10 Javascript
[43:33]EG vs Spirit Supermajor 败者组 BO3 第一场 6.4
2018/06/05 DOTA
python使用matplotlib绘制折线图教程
2017/02/08 Python
详解python中的index函数用法
2019/08/06 Python
Python 一行代码能实现丧心病狂的功能
2020/01/18 Python
Python作用域与名字空间原理详解
2020/03/21 Python
Pycharm及python安装详细步骤及PyCharm配置整理(推荐)
2020/07/31 Python
用python计算文件的MD5值
2020/12/23 Python
奥林匹亚体育:Olympia Sports
2020/12/30 全球购物
医生自荐信
2013/10/11 职场文书
英语专业毕业生自荐信范文
2013/12/31 职场文书
个人简历自荐信
2014/06/26 职场文书
医德医风个人总结
2015/02/28 职场文书
2015年庆祝国庆节66周年演讲稿
2015/07/30 职场文书