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 相关文章推荐
获取DOM对象的几种扩展及简写
Oct 09 Javascript
关于event.cancelBubble和event.stopPropagation()的区别介绍
Dec 11 Javascript
查找iframe里元素的方法可传参
Sep 11 Javascript
深入理解JS中的变量及作用域、undefined与null
Mar 04 Javascript
JavaScript中的toDateString()方法使用详解
Jun 12 Javascript
avalon js实现仿微博拖动图片排序
Aug 14 Javascript
jquery+ajax+text文本框实现智能提示完整实例
Jul 09 Javascript
原生ajax处理json格式数据的实例代码
Dec 25 Javascript
JavaScript ES6中export、import与export default的用法和区别
Mar 14 Javascript
Vue.js学习教程之列表渲染详解
May 17 Javascript
100行代码实现一个vue分页组功能
Nov 06 Javascript
VSCode使用之Vue工程配置eslint
Apr 30 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
laravel框架数据库配置及操作数据库示例
2019/10/10 PHP
phpwind放自动注册方法
2006/12/02 Javascript
js 全兼容可高亮二级缓冲折叠菜单
2010/06/04 Javascript
JavaScript 浏览器验证代码(来自discuz)
2010/07/17 Javascript
JQuery验证工具类搜集整理
2013/01/16 Javascript
javascript实现简单的可随机变色网页计算器示例
2016/12/30 Javascript
详解基于Node.js的HTTP/2 Server实践
2018/05/31 Javascript
ajax跨域访问遇到的问题及解决方案
2019/05/23 Javascript
js console.log打印对象时属性缺失的解决方法
2019/05/23 Javascript
javascript 对象 与 prototype 原型用法实例分析
2019/11/11 Javascript
ES6中Set和Map用法实例详解
2020/03/02 Javascript
Vue列表如何实现滚动到指定位置样式改变效果
2020/05/09 Javascript
vuecli项目构建SSR服务端渲染的实现
2020/10/30 Javascript
Vue基于localStorage存储信息代码实例
2020/11/16 Javascript
[02:51]DOTA2战队出征照拍摄花絮 TI3明星化身时尚男模
2013/07/22 DOTA
[00:57]辉夜杯战队访谈宣传片—VG
2015/12/25 DOTA
[54:24]Optic vs TNC 2018国际邀请赛小组赛BO2 第二场
2018/08/18 DOTA
Python原始字符串(raw strings)用法实例
2014/10/13 Python
Django查找网站项目根目录和对正则表达式的支持
2015/07/15 Python
Python中最大最小赋值小技巧(分享)
2017/12/23 Python
Python实现的字典值比较功能示例
2018/01/08 Python
djano一对一、多对多、分页实例代码
2019/08/16 Python
Python 中list ,set,dict的大规模查找效率对比详解
2019/10/11 Python
python中如何进行连乘计算
2020/05/28 Python
python rolling regression. 使用 Python 实现滚动回归操作
2020/06/08 Python
HTML5为输入框添加语音输入功能的实现方法
2017/02/06 HTML / CSS
Spanx塑身衣官网:美国知名内衣品牌
2017/01/11 全球购物
公务员职务工作的自我评价
2013/11/01 职场文书
英语道歉信范文
2014/01/09 职场文书
物业管理毕业生的自我评价
2014/02/17 职场文书
颁奖晚会主持词
2014/03/25 职场文书
英文导游词
2015/02/13 职场文书
家庭经济困难证明
2015/06/23 职场文书
贷款担保书范本
2015/09/22 职场文书
Python中requests做接口测试的方法
2021/05/30 Python
MySQL里面的子查询的基本使用
2021/08/02 MySQL