JavaScript实现点击查看大图半透明遮罩层效果
作者:闭包旅人时间:2026-10-30 06:12:10浏览:520
本文介绍如何使用JavaScript和CSS实现点击图片查看大图的半透明遮罩层效果。重点解决跨浏览器兼容性问题,包括使用rgba和IE滤镜实现背景透明,以及处理IE6 fixed定位兼容。代码包含完整的HTML、CSS和JS实现,可直接复制运行。
半透明遮罩层效果实现
这个效果在实际开发中应用广泛,经常有人咨询如何实现,因此将其整理成文章。下次遇到类似问题,直接分享该文章链接即可。效果实现相对简单,无需过多解释,通过代码注释即可理解具体实现。以下为完整代码,复制到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不支持fixed定位,需通过absolute定位结合动态设置top属性进行兼容。遮罩层大小计算存在浏览器差异,但均为细节问题,代码中可见,无需额外说明。
作者最新文章
什么时候该用JS构造器:与工厂模式、字面量的选择对比
2026-11-05 16:18:22
推荐几款轻量级JS照片墙开源库及对比
2026-11-05 15:56:19
JavaScript递归写法有哪些常见陷阱及避免方法
2026-11-05 14:53:38
JS数组浅拷贝与深拷贝怎么选?场景与方法总结
2026-11-05 14:41:02
p5.js 中 setup() 和 draw() 函数的执行机制详解
2026-11-05 12:32:38
