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 相关文章推荐
Stop SQL Server
Jun 21 Javascript
ext 代码生成器
Aug 07 Javascript
js中substr,substring,indexOf,lastIndexOf的用法小结
Dec 27 Javascript
简单的ajax连接库分享(不用jquery的ajax)
Jan 19 Javascript
jQuery实现的简单拖拽功能示例
Sep 13 Javascript
基于bootstrap-datetimepicker.js不支持IE8的快速解决方法
Nov 07 Javascript
Bootstrap免费字体和图标网站(值得收藏)
Mar 16 Javascript
JS中cookie的使用及缺点讲解
May 13 Javascript
LayUi中接口传数据成功,表格不显示数据的解决方法
Aug 19 Javascript
@angular前端项目代码优化之构建Api Tree的方法
Dec 24 Javascript
jQuery中使用validate插件校验表单功能
May 24 jQuery
Element Breadcrumb 面包屑的使用方法
Jul 26 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中使用PDF文档功能
2006/10/09 PHP
PHP实现通过Luhn算法校验信用卡卡号是否有效
2015/03/23 PHP
PHP对象克隆clone用法示例
2016/09/28 PHP
php实现文件与16进制相互转换的方法示例
2017/02/16 PHP
thinkPHP5框架自定义验证器实现方法分析
2018/06/11 PHP
浅谈PHP中的那些魔术常量
2020/12/02 PHP
JavaScript高级程序设计 XML、Ajax 学习笔记
2011/09/10 Javascript
js获取指定的cookie的具体实现
2014/02/20 Javascript
JavaScript 作用域链解析
2014/11/13 Javascript
如何实现JavaScript动态加载CSS和JS文件
2020/12/28 Javascript
vue.js通过自定义指令实现数据拉取更新的实现方法
2016/10/18 Javascript
JS编写函数实现对身份证号码最后一位的验证功能
2016/12/29 Javascript
Nodejs高扩展性的模板引擎 functmpl简介
2017/02/13 NodeJs
js 实现获取name 相同的页面元素并循环遍历的方法
2017/02/14 Javascript
微信小程序开发animation心跳动画效果
2017/08/16 Javascript
详解Vue路由History mode模式中页面无法渲染的原因及解决
2017/09/28 Javascript
jQuery实现的点击显示隐藏下拉菜单功能完整示例
2019/05/17 jQuery
JS实现判断数组是否包含某个元素示例
2019/05/24 Javascript
vue实现评论列表功能
2019/10/25 Javascript
使用vant的地域控件追加全部选项
2020/11/03 Javascript
Python实现各种排序算法的代码示例总结
2015/12/11 Python
python实现百万答题自动百度搜索答案
2018/01/16 Python
python构建深度神经网络(DNN)
2018/03/10 Python
python 输入一个数n,求n个数求乘或求和的实例
2018/11/13 Python
对python中词典的values值的修改或新增KEY详解
2019/01/20 Python
python+pyqt5实现24点小游戏
2019/01/24 Python
Python Django基础二之URL路由系统
2019/07/18 Python
Python抓包程序mitmproxy安装和使用过程图解
2020/03/02 Python
在阿联酋购买翻新手机和平板电脑:Teckzu
2021/02/12 全球购物
市优秀教师事迹材料
2014/02/05 职场文书
中医学专业自荐信范文
2014/04/01 职场文书
小学生运动会通讯稿
2014/09/23 职场文书
2015年学校后勤工作总结
2015/04/08 职场文书
大学自主招生自荐信(2016精选篇)
2016/01/28 职场文书
60句有关成长的名言
2019/09/04 职场文书
Golang实现可重入锁的示例代码
2022/05/25 Golang