论坛交流
首页办公自动化| 网页制作| 平面设计| 动画制作| 数据库开发| 程序设计| 全部视频教程
应用视频: Windows | Word2007 | Excel2007 | PowerPoint2007 | Dreamweaver 8 | Fireworks 8 | Flash 8 | Photoshop cs | CorelDraw 12
编程视频: C语言视频教程 | HTML | Div+Css布局 | Javascript | Access数据库 | Asp | Sql Server数据库Asp.net  | Flash AS
当前位置 > 文字教程 > Javascript教程
Tag:验证,特效,入门,实例,验证,表单,特效,正则表达式,跑马灯,document,函数,代码,getElementByID,菜单,图片,视频教程

模拟弹窗层

文章类别:Javascript | 发表日期:2010-1-27 16:47:48

-  半透明遮罩
  -  临时隐藏下拉菜单
  -  支持字符串与对象类型
  -  容器绝对居中(图片预加载)
  -  ...
代码:
你可以这样玩:
openWin.wd("<img src=http://pr1984.com/images/bg/loading02.gif alt='' />")
还能这样:
openWin.wd(document.getElementById("box"))
<p id="box">测试</p>

JS代码:
复制内容到剪贴板代码:
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){//用于处理获取初始化对象的。wd没啥意思,随手写的。
        this.obj=obj;//指定显示对象
        this.oc(1);//显示:遮罩 + select + 页面滚动条  + 显示对象
        },
    oc:function(o){//o不为空的话,就是开启(一大串...)。这个“o”如果为空,则关闭(还是一大串...)。实际上是用来区别“openWin.wd”与“openWin.oc”的,因为用“wd”初始化时也要调用“oc”。
        if(!o){var o=0;}
        this.bodyBg(o);//显示隐藏遮罩
        this.center(o);//显示隐藏主内容
        this.hs(o);//显示隐藏select
        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");//找出页面内所有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;}//如果 [主要内容] 的对象类型为string(字符串),则直接输出到父容器内。
            else{var obj=this.obj.cloneNode(true);this.$("center_pr").appendChild(obj);}//否则就用插入的方式搞进去吧。呃,前提是记得先copy [主要内容] 生成一个新的,不然下面的操作都会影响到源内容哦。
            openWin.$("center_pr").style.marginTop=-(openWin.$("center_pr").scrollHeight/2)+((window.pageYOffset)?window.pageYOffset:document.documentElement.scrollTop)+"px";//绝对居中的方法都熟悉吧,这里是得到一个marginTop值,那么就得用“网页卷去的高”加上自身高度的一半。
            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);//插入标签对象到指定对象内
        }
    }

 

实例运行:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<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" />
<meta name="keywords" content="PRcss,xhtml,html,css,js,book,个人主页,无聊,神经,懒惰" />
<meta name="description" content="PRcss的个人主页,无聊的,神经的,懒惰的..." />
<meta name="Author" content="PRcss,qq:50198763" />
<meta name="Copyright" content="本页版权归PRcss所有。All Rights Reserved" />
<link rel="shortcut icon" href="http://www.pr1984.com/favicon.ico" />
<title>弹窗</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){//用于处理获取初始化对象的。wd没啥意思,随手写的。
  this.obj=obj;//指定显示对象
  this.oc(1);//显示:遮罩 + select + 页面滚动条  + 显示对象
  },
 oc:function(o){//o不为空的话,就是开启(一大串...)。这个“o”如果为空,则关闭(还是一大串...)。实际上是用来区别“openWin.wd”与“openWin.oc”的,因为用“wd”初始化时也要调用“oc”。
  if(!o){var o=0;}
  this.bodyBg(o);//显示隐藏遮罩
  this.center(o);//显示隐藏主内容
  this.hs(o);//显示隐藏select
  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");//找出页面内所有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;}//如果 [主要内容] 的对象类型为string(字符串),则直接输出到父容器内。
   else{var obj=this.obj.cloneNode(true);this.$("center_pr").appendChild(obj);}//否则就用插入的方式搞进去吧。呃,前提是记得先copy [主要内容] 生成一个新的,不然下面的操作都会影响到源内容哦。
   openWin.$("center_pr").style.marginTop=-(openWin.$("center_pr").scrollHeight/2)+((window.pageYOffset)?window.pageYOffset:document.documentElement.scrollTop)+"px";//绝对居中的方法都熟悉吧,这里是得到一个marginTop值,那么就得用“网页卷去的高”加上自身高度的一半。
   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="http://www.qq82.com/datas/photo/2006-10-18/qiche/2/a1_038.jpg" alt="点击放大" /></p>
<p><button type="button" onclick="openWin.wd('<img src=http://www.car1997.com/upimg/allimg/090525/100SM255-5.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=http://pr1984.com/images/bg/loading02.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推荐教程
Javascript热门教程
看全部视频教程
购买方式/价格
购买视频教程: 咨询客服
tel:15972130058