用DIV实现WEB页面蒙板效果
见有些网页上的Div蒙板效果不错,忍不住手痒,自己写了个并简单封装了一下。在
IE6和
FireFox2下测试通过。
先看效果演示:
空白页面上有个按钮,作用是单击它时显示蒙板效果。

下面是单击后显示的黑色半透明蒙板效果,之间嵌入要突出显示的内容。如果用户拖动滚动条,中间Div会自动跟随,永远在用户可视区域内。

好了,上代码
首先是HTML页面的调用代码
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
<script type="text/javascript" src="/Admin/Script/maskDialog.js" ></script>
<link rel="stylesheet" href="css.css" />
<script type="text/javascript">
window.onload=function(){MaskDialog.mainForm=document.getElementById("msg");}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<input type="button" onclick="MaskDialog.show();" value="show mask layer" />
<div id="msg">just a test</div>
</div>
</form>
</body>
</html>
核心代码就几行
//这行用来绑定控件
window.onload=function()

{MaskDialog.mainForm=document.getElementById("msg");}
//这行用来显示蒙板效果
MaskDialog.show();
//这行用来吟唱蒙板效果
MaskDialog.hide();
现在贴js的源码
function maskDialog()
{
// public properties start
this.mainForm;
this.top="30";
// public properties end
this.showStatus=false;
if(typeof this.mainForm != "undefined" && this.mainForm != null)
{
this.mainForm.style.display="none";
}
if(window.onresize)
{
var evt=window.onresize;
window.onresize=function(){evt(); MaskDialog.resize();};
}
else
{
window.onresize=function(){MaskDialog.resize();};
}
if(window.onscroll)
{
var evt=window.onscroll;
window.onscroll=function(){evt(); MaskDialog.scroll();};
}
else
{
window.onscroll=function(){MaskDialog.scroll();};
}
//隐藏蒙板效果
this.hide=function()
{
var mask=document.getElementById("div_Mask");
if(typeof mask != "undefined" && mask!=null)
{
var body = document.getElementsByTagName("body")[0];
body.removeChild(mask);
}
var ifr=document.getElementById("ifr_Mask");
if(typeof ifr != "undefined" && ifr!=null)
{
var body = document.getElementsByTagName("body")[0];
body.removeChild(ifr);
}
if(typeof this.mainForm != "undefined" && this.mainForm != null)
{
this.mainForm.style.display="none";
}
this.showStatus=false;
};
//显示蒙板效果
this.show=function()
{
var body = document.getElementsByTagName("body")[0];
var pageDimensions=this.getPageDimensions();
var sheet = document.createElement("div");
sheet.setAttribute("id","div_Mask");
sheet.style.position="absolute";
sheet.style.left="0px";
sheet.style.top="0px";
sheet.style.zIndex="999";
sheet.style.width=pageDimensions[0] + "px";
sheet.style.height=pageDimensions[1] + "px";
var ifr = document.createElement("iframe");
ifr.setAttribute("id","ifr_Mask");
ifr.style.position="absolute";
ifr.style.display="block";
ifr.style.zIndex="998";
ifr.width=pageDimensions[0];
ifr.height=pageDimensions[1];
ifr.scrolling="no";
ifr.frameborder="0";
ifr.style.left="0px";
ifr.style.top="0px";
body.appendChild(ifr);
body.appendChild(sheet);
if(typeof this.mainForm != "undefined" && this.mainForm != null)
{
this.mainForm.style.display="block";
this.mainForm.style.zIndex="1000";
}
this.showStatus=true;
this.scroll();
};
this.resize=function()
{
if(this.showStatus==false)
{
return;
}
var mask=document.getElementById("div_Mask");
var ifr=document.getElementById("ifr_Mask");
if(typeof mask != "undefined" && mask != null && typeof ifr != "undefined" && ifr != null )
{
var body = document.getElementsByTagName("body")[0];
var pageDimensions=this.getPageDimensions();
mask.style.width=pageDimensions[0] + "px";
mask.style.height=pageDimensions[1] + "px";
ifr.width=pageDimensions[0];
ifr.height=pageDimensions[1];
this.scroll();
}
};
this.scroll=function()
{
if(this.showStatus==false)
{
return;
}
if(typeof this.mainForm != "undefined" && this.mainForm != null)
{
var pageDimensions=this.getPageDimensions();
this.mainForm.style.position="absolute";
this.mainForm.style.top=document.documentElement.scrollTop + "px";
if(typeof this.mainForm.style.width == "undefined" || this.mainForm.style.width=="")
{
this.mainForm.style.width=pageDimensions[0] /2 + "px";
}
var newLeft= pageDimensions[0] / 2 - parseInt(this.mainForm.style.width,10) /2
var newTop= document.documentElement.scrollTop + parseInt(this.top);
this.mainForm.style.left= newLeft + "px";
this.mainForm.style.top= newTop + "px";
}
};
this.getPageDimensions=function()
{
var body = document.getElementsByTagName("body")[0];
var bodyOffsetWidth = 0;
var bodyOffsetHeight = 0;
var bodyScrollWidth = 0;
var bodyScrollHeight = 0;
var pageDimensions = [0,0];
pageDimensions[0]=document.documentElement.clientWidth;
pageDimensions[1]=document.documentElement.clientHeight;
bodyOffsetWidth=body.offsetWidth;
bodyOffsetHeight=body.offsetHeight;
bodyScrollWidth=body.scrollWidth;
bodyScrollHeight=body.scrollHeight;
if(bodyOffsetWidth > pageDimensions[0])
{
pageDimensions[0]=bodyOffsetWidth;
}
if(bodyOffsetHeight > pageDimensions[1])
{
pageDimensions[1]=bodyOffsetHeight;
}
if(bodyScrollWidth > pageDimensions[0])
{
pageDimensions[0]=bodyScrollWidth;
}
if(bodyScrollHeight > pageDimensions[1])
{
pageDimensions[1]=bodyScrollHeight;
}
return pageDimensions;
};
return true;
}
var MaskDialog=new maskDialog();
原文出处:http://www.cnblogs.com/cnseven/