当前位置:编程学习 > JS >>

Js模拟弹出层(不刷新弹出内容框、图片、登录框)

用JavaScript模拟弹出层,在不刷新页面的情况下,弹出内容框、图片、登录框,类似于Ajax应用的小程序。然后如果内容有图片,则图片预加载后再计算对象高宽。不然自身的高度就不对了,有时候图片把容器撑开了,但是我们在图片没下载完毕之前就获取了当时的容器高度……
答案:<html xmlns="http://www.w3.org/1999/xhtml" lang="zh-CN" xml:lang="zh-CN">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Js自定义多功能弹窗插件</title>
<style type="text/css">
body,p { margin:0; padding:0; }
p { padding:10px; }
</style>
</head>
<script type="text/javascript">
var openWin = {
	$:function(obj,tag){
		if(typeof obj=='string'){var obj=document.getElementById(obj);if(!obj)return}
		if(tag){return obj.getElementsByTagName(tag)}
		else{return obj}
		},
	wd:function(obj){
		this.obj=obj;//指定显示对象
		this.oc(1);
		},
	oc:function(o){
		if(!o){var o=0;}
		this.bodyBg(o);
		this.center(o);
		this.hs(o);
		this.hb(o);
		},
	hb:function(o){
		if(document.documentElement){document.documentElement.style.overflow=(o==1)?"hidden":"";}
		else{document.body.style.overflow=(o==1)?"hidden":"";}
		},
	hs:function(o){//第二串:显示隐藏下拉菜单(select)
		var s=document.getElementsByTagName("select");
		if(s[0]=="undefined"){return}
		for(var i=0;i<s.length;i++){
			if(o==1){s[i].style.visibility="hidden";}
			else{s[i].style.visibility="";}
			}
		},
	bodyBg:function(o){
		if(o==0){document.getElementsByTagName("body")[0].removeChild(this.$("body_pr"));}
		else{
			document.getElementsByTagName("body")[0].style.height="100%";
			var style={position:"absolute",left:"0",top:"0",zIndex:"9999",width:"100%",height:"999em",backgroundColor:"#000",filter:"alpha(opacity=50)",opacity:"0.5"}//预置样式用于生成遮罩对象
			this.cDiv("body_pr","div",style,document.getElementsByTagName("body")[0]);//5、4、3、2、1 创建!
			}
		},
	center:function(o){
		if(o==0){document.getElementsByTagName("body")[0].removeChild(this.$("center_pr"));}
		else{
			var style={position:"absolute",left:"50%",top:"50%",zIndex:"10000"}
	this.cDiv("center_pr","div",style,document.getElementsByTagName("body")[0]);//5、4、3、2、1 创建!
			if(typeof this.obj=='string'){var obj=this.obj;this.$("center_pr").innerHTML=obj;;
			else{var obj=this.obj.cloneNode(true);this.$("center_pr").appendChild(obj);}
		openWin.$("center_pr").style.marginTop=-(openWin.$("center_pr").scrollHeight/2)+((window.pageYOffset)?window.pageYOffset:document.documentElement.scrollTop)+"px";
			openWin.$("center_pr").style.marginLeft=-(openWin.$("center_pr").scrollWidth/2)+"px";
			if(this.$("center_pr").getElementsByTagName("img")[0]){
				var objimg=this.$("center_pr").getElementsByTagName("img");
				objimg[objimg.length-1].onload=function(){
					openWin.$("center_pr").style.marginTop=-(openWin.$("center_pr").scrollHeight/2)+((window.pageYOffset)?window.pageYOffset:document.documentElement.scrollTop)+"px";
		openWin.$("center_pr").style.marginLeft=-(openWin.$("center_pr").scrollWidth/2)+"px";
					}
				}
			}
		},
	cDiv:function(id,tag,style,fid){//创建HTML标签方法
		var div=document.createElement(tag);//创建标签对象
			div.id=id;//赋予对象ID
			for(var i in style){div.style[i]=style[i];}//批量插入style属性与属性值
			fid.appendChild(div);//插入标签对象到指定对象内
		}
	}
</script>
<body>
<p><img src="/jscss/demoimg/wall_s5.jpg" alt="点击放大" /></p>
<p><button type="button" onclick="openWin.wd('<img src=/jscss/demoimg/wall5.jpg onclick=openWin.oc() alt=点击关闭 />');">查看大图</button></p>
<hr />
<p><button onclick="openWin.wd(openWin.$('box'))" type="button">打开新窗口</button></p>
<div id="box" style="padding:10px;border:solid 1px #ccc;background:#fff;">
	<p>新窗口</p>
	<p><button onclick="openWin.oc()" type="button">关闭窗口</button></p>
</div>
<hr />
<p><button type="button" onclick="openWin.wd('<img src=/jscss/demoimg/loading.gif alt=上传中…… /><p style=text-align:center;padding-top:10px;><span onclick=openWin.oc() style=padding:5px;padding-left:8px;padding-right:8px;padding-bottom:2px;border-style:solid;border-width:1px;border-color:#999;border-top-color:#666;border-left-color:#666;color:#ccc;background:#777;cursor:pointer;font-size:12px;>取消上传</span></p>')">loading</button></p>
</body>
</html>

上一个:一段网页文字展开与隐藏功能的JavaScript实现
下一个:CSS直方图布局示例

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,