我这里有一个比较好的弹出窗口的代码,类似新浪博客里的弹出窗口效果,现在我想24小时只弹出一次该窗口,请问如何实现?下面是主html页面的代码:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-type" content="text/html; charset=gb2312" />
<title>类似新浪博客右下角弹出浮动层窗口可最小化可关闭_懒人建站 http://www.51xuediannao.com</title>
<meta name="keywords" content="HTML+CSS模板,HTML+CSS教程,HTML+CSS导航菜单,FLASH焦点图,网页特效" />
<meta name="description" content="懒人建站为您提供-HTML+CSS模板,HTML+CSS教程,JS广告代码,HTML+CSS导航菜单,FLASH焦点图片,国外网页设计欣赏与模板和CSS技巧。" />
</head><body><script>
/**---------------------------------------------------------------------------
*/
{
var ua = navigator.userAgent;
var $IE = (navigator.appName == "Microsoft Internet Explorer");
var $IE5 = $IE && (ua.indexOf('MSIE 5') != -1);
var $IE5_0 = $IE && (ua.indexOf('MSIE 5.0') != -1);
var $Gecko = ua.indexOf('Gecko') != -1;
var $Safari = ua.indexOf('Safari') != -1;
var $Opera = ua.indexOf('Opera') != -1;
var $Mac = ua.indexOf('Mac') != -1;
var $NS7 = ua.indexOf('Netscape/7') != -1;
var $NS71 = ua.indexOf('Netscape/7.1') != -1;if ($Opera) {
   $IE = true;
   $Gecko = false;
   $Safari = false;
}
if ($IE5) {
         $IE = true;          $Gecko = false;
         $Safari = false;
}
}
function $_t(root,tag,id){
var ar=root.getElementsByTagName(tag);
for (var i=0;i<ar.length;i++){
   if (ar[i].id==id) return ar[i];
}
return null;
}
function _(root){var ids=arguments;
var i0=0;if (typeof(root) == 'string') root = document;
else i0=1;for (var i=i0;i<ids.length;i++){
   var s=root.getElementsByTagName("*");   var has=false;
   for (var j=0;j<s.length;j++){
    if (s[j].id==ids[i]){
     root=s[j];
     has=true;
     break;
    }
   }
   if (!has) return null;
}
return root;
}
//util 
function $dele(o,fn,rv){var r = function (){
  
   var s=arguments.callee;
  
   var args = [];
   for (var i=0;i<s.length;i++) args[i]=s[i];
   var argStr = args.join(",");
   if (argStr.length > 0) argStr=","+argStr;
  
   var callStr="s.thiz[s.fn]("+argStr+")";
   var v=eval(callStr);
  
  
   if (s.rv!=null) {
    return s.rv;
   } else {
    return v;
   }
}r.thiz=o;
r.fn=fn;
r.rv=rv;return r;
} function $ge(e){
if (e!=null) return e;
if ($IE) {
   return window.event;
} else return e;

/**
* get event for a element;
*/
function $gte(e,ev){
if (!e.getElementById) e=e.ownerDocument;
if ($IE) {
   return ev!=null ? ev : e.parentWindow.event;
} else {
   return ev;
   throw new Error("this method can only execute in IE");
}
}
function $addEL(n,e,l,b){if ($IE){
   if (n["$__listener_"+e]==null){
    var lst=function (e){
    
     var f=arguments.callee;
     var ar=f.fList;
    
     e=$ge(e);
     for (var i=0;i<ar.length;i++){     
      ar[i](e);
     }
    }
    lst.fList=[];   
    n["$__listener_"+e]=lst;
    n["on"+e]=n["$__listener_"+e]; 
   
   }
   var fList=n["$__listener_"+e].fList;
   fList[fList.length]=l;
  
} else {
   n.addEventListener(e,l,b);
}
}
function $cancelEvent (e) {
if ($IE) {
   e.returnValue = false;
   e.cancelBubble = true;
} else
   e.preventDefault();
};
function $cpAttr(o,p){
for (var i in p){
   var s=p[i];
   o[i]=s;
}
return o;
}
function $getValue(v,d){
return v==null ? d : v;
}
var $gv=$getValue; 
var $dom={
parseInt : function(s) {
   if (s == null || s == '' || typeof(s)=='undefined')
    return 0;    return parseInt(s);
},
getClientSize : function(n){
   if ($IE){
    //ts("this is ie");
    var s= {x:n.clientLeft,y:n.clientTop};
    s.l=s.x;
    s.t=s.y;
    s.r=n.clientRight;
    s.b=n.clientBottom;
   
    s.w=n.clientWidth;
    s.h=n.clientHeight;
   
    //tr("calculated client size");
   
    return s;
   } else {
    var t=n.style;
    if (t.borderLeftWidth.length==0 || t.borderTopWidth.length==0 || t.borderRightWidth.length==0 || t.borderBottomWidth.length==0){
    
     var l=n.offsetWidth;
     t.borderLeftWidth="0px";
     l-=n.offsetWidth; 
    
     var r=n.offsetWidth;
     t.borderRightWidth="0px";
     r-=n.offsetWidth;
    
     var o=n.offsetHeight;
     t.borderTopWidth="0px";
     o-=n.offsetHeight;
    
     var b=n.offsetHeight;
     t.borderBottomWidth="0px";
     b-=n.offsetHeight;
    
     t.borderLeftWidth=l+"px";
     t.borderTopWidth=o+"px";
     t.borderRightWidth=r+"px";
     t.borderBottomWidth=b+"px";
    
     var s={l:l,r:r,t:o,b:b,x:l,y:o};
    
     
     return s;
    } else {
     var s= {
       x: this.parseInt(n.style.borderLeftWidth),
       y: this.parseInt(n.style.borderTopWidth),
       r: this.parseInt(n.style.borderRightWidth),
       b: this.parseInt(n.style.borderBottomWidth)
      };
     s.l=s.x;
     s.t=s.y;
     return s;
    }
   }
},

解决方案 »

  1.   

    getSize : function (n,withMargin){
       var c={
        x : n.offsetWidth != null ? n.offsetWidth : 0,
        y : n.offsetHeight != null ? n.offsetHeight : 0
       };
      
       //c.x=this.parseInt(c.x);
       //c.y=this.parseInt(c.y);
          //tr("get size for : "+n.id);
       //tra(c);
       if (withMargin) {
        var m=this.getMargin(n);
        c.x+=m.l+m.r;
        c.y+=m.t+m.b;
       }
       //tra(m);
       //tr("get size for : "+n.id);
       //tra(c);
       return c; 
    },setSize : function(elmt,x,y,withMargin){
       //tf("$dom::setSize");
       //if (elmt==undefined || elmt.style.display=="none") return;
       if ($IE){
        if (withMargin){    
         var m=this.getMargin(elmt);
         x-=m.l+m.r;
         y-=m.t+m.b;    
        }   
        elmt.style.width=x;   
        elmt.style.height=y;    
       } else {
        var clientSize=this.getClientSize(elmt);
        var dx=clientSize.l+clientSize.r;
       
        var dy=clientSize.t+clientSize.b;
       
        elmt.style.width=x-dx+"px";
        elmt.style.height=y-dy+"px";
       }
    },/**
    * get the context position relative to its parent.
    */
    getPosition : function (elmt,withMargin){
       var c;
      
       c={
        x:elmt.offsetLeft,
        y:elmt.offsetTop
       };
       //c.x=this.parseInt(c.x);
       //c.y=this.parseInt(c.y);
       if (withMargin){
        var m=this.getMargin(elmt);
        c.x-=m.l;
        c.y-=m.t;
       }
      
       return c;
    },
    setPosition : function (elmt,x,y,withMargin){ 
       //tf("$dom::setPosition");
       if (withMargin){
        //var m=this.getMargin(elmt);
        //x-=m.l;
        //y-=m.t;
       } 
       elmt.style.left=x+"px";
       elmt.style.top=y+"px";
    },
      setAlpha : function (n,a){
       return;
       n.style.filter = "progid:DXImageTransform.Microsoft.Alpha(opacity="+a*100+");";
       n.style.opacity = a;
       n.style.MozOpacity = a;
    }}
    var $motion={
    smooth : function (s, e, t){
       if (t>1) t=1;
       return (e - s) * t + s;
    }
    } function PopUp(id, config){
    this.id=id;var c = this.config = config;
    c.width = $gv(c.width,300);
    c.height = $gv(c.height,200);
    c.bottom = $gv(c.bottom,0);
    c.right = $gv(c.right,20);
    c.display = $gv(c.display,true);
    c.contentUrl= $gv(c.contentUrl,"");
    c.motionFunc= $gv(c.motionFunc,$motion.smooth);
    c.position = {x:0,y:0};var t=c.time;
    t.slideIn = $gv(t.slideIn,10);
    t.hold   = $gv(t.hold,10);
    t.slideOut = $gv(t.slideOut,10);t.slideIn *= 1000;
    t.hold   *= 1000;
    t.slideOut *= 1000;this.container = document.body;
    this.popup = null;
    this.content = null;
    this.switchButton = null;this.moveTargetPosition = 0;
    this.startMoveTime = null;
    this.startPosition = null; this.status = PopUp.STOP;
    this.intervalHandle = null;this.mm = "max";this.imgMin = "images/min.gif";
    this.imgMax = "images/max.gif";
    } //static members
    PopUp.STOP = 0;
    PopUp.MOVE_DOWN = 1;
    PopUp.MOVE_UP = 2;
    PopUp.SWITCH_TO_MIN = PopUp.MOVE_DOWN | 4;
    PopUp.SWITCH_TO_MAX = PopUp.MOVE_UP | 8; 
    var __o={
    create : function (){
      
       var doc=document;
       var c=this.config; 
      
       //create popup holder & config it.
       var p = this.popup = doc.createElement("div");
       this.container.appendChild(p);
      
       p.id=this.id;
       p.style.cssText="position:absolute;\
           z-index:9000;\
           overflow:hidden;\
           border:0px solid #f00;\
           ";
       $dom.setSize(p, c.width, c.height);
      
      
      
       //create popup content holder & config it.
       var t = this.content = doc.createElement("div");
       p.appendChild(t);
      
       t.id = this.id+"_content"; 
       t.style.cssText="position:absolute;\
           z-index:1;\
           overflow:hidden;";
       $dom.setSize(t, c.width, c.height);
       $dom.setPosition(t,0,0);//add
      
       c.position.y = c.height;//add
       this.onresize();//add
       //$dom.setPosition(t, 0, c.height);//hide it at first
      
      
      
       // create content holder's content.
       // a close button & an iframe for loading external content.
       t.innerHTML = "<a id='closeButton' href='#'></a>"+
              "<a id='switchButton' href='#'></a>"+
               "<iframe id='"+this.id+"_content_iframe' src="+c.contentUrl+" frameborder=0 scrolling=no width='100%' height='100%' style='height:100%'></iframe>"; 
      
      
       var sBtn = this.switchButton = $_t(t,'a',"switchButton");
       sBtn.style.cssText='position:absolute;\
            z-index:2;\
            \
            font-size:0px;\
            line-height:0px;\
            \
            left:220px;\
            top:6px;\
            width:15px;\
            height:15px;\
            \
            background-image:url("images/min.gif");';   $addEL(sBtn,"click",$dele(this,"switchMode"),true);
       $addEL(sBtn,"click",$cancelEvent,true); 
      
      
       var btn = $_t(t,'a',"closeButton");
       btn.style.cssText='position:absolute;\
            z-index:2;\
            \
            font-size:0px;\
            line-height:0px;\
            \
            left:240px;\
            top:6px;\
            width:15px;\
            height:15px;\
            \
            background-image:url("images/close.gif");';
      
      
      
       $addEL(btn,"mouseover",function (e){            $dom.setAlpha(this,0.4);
               },true);
      
       $addEL(btn,"mouseout",function (e){
               $dom.setAlpha(this,1);
               },true);
               
      
      
       $addEL(btn,"click",$dele(this,"hide"),true);
       $addEL(btn,"click",$cancelEvent,true);
      
       var container=$IE ? document.body : document.documentElement;
      
       $addEL(document.body,"resize",$dele(this,"onresize"),true);
      
        this.__hackTimer=window.setInterval("__popup.onresize()",50);
      
       
       $addEL(container,"scroll",$dele(this,"onresize"),true);
      
       //initialize position at once.
       this.onresize();
      
    },show : function (){
      
       if (!this.config.display) return;
      
       this.moveTargetPosition = 0;
       this.status = PopUp.MOVE_UP;
       this.startMove();
    },hide : function (){
      
       this.moveTargetPosition = this.config.height;
       this.status = PopUp.MOVE_DOWN;
       this.startMove();
    },minimize : function (){
       //alert("minimize");
       this.mm = "min";
       this.moveTargetPosition = this.config.height - 28;
       this.status = PopUp.SWITCH_TO_MIN;
       this.startMove();
      
       var s = this.switchButton.style; 
       var bg = s.backgroundImage;
      
       if (bg.indexOf(this.imgMin) > -1) {
        bg = bg.replace(this.imgMin,this.imgMax);
        s.backgroundImage = bg;   
       }
    },maximize : function (){
       //alert("maximize");
       if (!this.config.display) return;
      
       this.mm = "max";
       this.moveTargetPosition = 0;
       this.status = PopUp.SWITCH_TO_MAX;
       this.startMove();
      
      
       var s = this.switchButton.style;
       var bg = s.backgroundImage;
      
       if (bg.indexOf(this.imgMax) > -1) {
        bg = bg.replace(this.imgMax,this.imgMin);
        s.backgroundImage = bg;   
       }
    },delayHide : function (){   
       window.setTimeout("__popup.hide()",this.config.time.hold);
    },delayMin : function (){
       window.setTimeout("__popup.minimize()",this.config.time.hold);
    },switchMode : function (){
       //alert("switch");
       if (this.mm == "min"){
        this.maximize();
       } else {
        this.minimize();
       }
    },startMove : function (){
       this.stopMove();
      
       this.intervalHandle = window.setInterval("__popup.move()",100);
      
       this.startMoveTime = new Date().getTime();
       //this.startPosition = $dom.getPosition(this.content).y;//parseInt(this.content.style.top);
       this.startPosition = this.config.position.y;
    },stopMove : function (){
       if (this.intervalHandle != null) window.clearInterval(this.intervalHandle);    this.intervalHandle = null;
    },
    move : function (){
      
      
       var t = new Date().getTime();
       t = t - this.startMoveTime;
      
       var total = this.status & PopUp.MOVE_UP ? 
          this.config.time.slideIn : 
          this.config.time.slideOut;
      
       var y = this.config.motionFunc(this.startPosition, this.moveTargetPosition, t/total);
       //this.content.style.top = y + "px";
       this.config.position.y = y;
       this.onresize();
        
       if (t >= total){
        this.onFinishMove();
       }
    },onFinishMove : function (){
       this.stopMove();
       //this.content.style.top = this.moveTargetPosition + "px";
      
       if (this.status == PopUp.MOVE_UP && this.config.time.hold > 0 ){     this.delayMin();
       } else {
        if (this.__hackTimer!=null) window.clearInterval(this.__hackTimer);
       }
       this.status = PopUp.STOP;
    },onresize : function (){
       var c=this.config;
       //var t=document.documentElement;
       var t=document.body;
      
       var dx=t.clientWidth + t.scrollLeft;
       var dy=t.clientHeight + t.scrollTop;
      
       var x = dx - c.right - c.width ;
       var y = dy - c.bottom - c.height + c.position.y;
      
      
       $dom.setPosition(this.popup, x, y); 
       $dom.setSize(this.popup, c.width, c.height-c.position.y);
    }
    } $cpAttr(PopUp.prototype,__o); 
      

  2.   

    function readCookie(name)
    {
    var cookieValue = "";
    var search = name + "=";
    if(document.cookie.length > 0)

        offset = document.cookie.indexOf(search);
        if (offset != -1)
        { 
          offset += search.length;
          end = document.cookie.indexOf(";", offset);
          if (end == -1) end = document.cookie.length;
          cookieValue = unescape(document.cookie.substring(offset, end))
        }
    }
    return cookieValue;
    } function writeCookie(name, value, hours)
    {
    var expire = "";
    if(hours != null)
    {
        expire = new Date((new Date()).getTime() + hours * 3600000);
        expire = "; expires=" + expire.toGMTString();
    }
    document.cookie = name + "=" + escape(value) + expire + ";path=/";
    } /**
    * main function to config the pop-up window & run it.
    * web deployer change codes here to manipulte popups performance.
    * & should not change codes out of this function.
    */
    function job(){ /**
    * config object
    */
    var cfg={
       //width & height of the popup window ,these values should be determined debpended on inner contents.
       width     : 260,
       height     : 190,
      
       //distance to the bottom & the right edge.
       bottom    : 2,
       right    : 19,
      
       //switch of displaying the popup
       display    : true,
       
       //content url
       contentUrl   : "51xuediannao.com.htm",
      
       //time configuration,in seconds
       time : {
        slideIn    : 1,
        hold     : 60,
        slideOut   : 1
       }      
    }//at what time the popup should display,in hours : 0~23,
    //the number after add symbol means after how many the hours to display popup for the next time. 
    var displayTimeList = ["15+1"];// the popup displays each time thie page reload or only once at the first time page loaded.
    // once / eachTime
    var displayMode = "once";
    //var displayMode = "eachTime";//cookie name storing the next time to display popup
    var cookieName="sina_blog_popup_next_display_time";/**
    * --------------------- from here below, the codes should NOT be modified.
    */
    var hours={};
    var delays=[];
    for (var i=0;i<displayTimeList.length;i++) {
       var o = displayTimeList[i];
       var ar = o.split("+");
       var t = parseInt(ar[0]);
       for (var m=0;m<ar.length-1;m++){
          ar[m]=ar[m+1];
       }   
       hours[t]=true;
       for (var j=0;j<ar.length;j++){
        hours[t + parseInt(ar[j])]=true;
       }  
    }
    displayTimeList=[];
    for (var i in hours){
       var s = parseInt(i);
       if (isNaN(s)) continue;
       displayTimeList[displayTimeList.length]=s;
    }
    displayTimeList = displayTimeList.sort();
    //alert(displayTimeList);
    var pp = new PopUp("xp", cfg);
    window.__popup=pp;
    pp.create();//display:var n=readCookie(cookieName); if (displayMode=="eachTime") 
       pp.show();
    else {
       var tm=new Date().getTime();
       if (n==null || tm>n) {
        pp.show();
       
        //get next display time
        var hr=new Date().getHours();
        var f = 60*60*1000;
        var l = displayTimeList.concat(), len = l.length; 
        for (var i = 0; i < len; i++) l[len + i] = l[i] + 24;
        for (var i = 0; i < l.length && hr >= l[i]; i++);
       
        var dt = new Date();
        dt.setHours(l[i] > 23 ? l[i] - 24 : l[i]);
        var nextTime = dt.getTime();
        if (l[i] > 23) nextTime += f * 24 ;
       
        writeCookie(cookieName, nextTime, 1);
       }
    }
    } function doit(){ 
    if(document.readyState == 'loaded' || document.readyState == 'complete'){ 
       job();
    }else{
    window.setTimeout(doit,500);
       return;
       }} doit(); 
    </script>
    <!--下面只是说明与程序代码无关-->
    <div style="width:95%; height:auto; display:block; margin:0 auto; margin-top:30px; font-size:10pt; line-height:150%;">
    <span>本代码由<a href="http://www.51xuediannao.com" style="color:#F00;">懒人建站网 收集整理</a> </span><br>
    <a href="http://www.51xuediannao.com">懒人建站 http://www.51xuediannao.com</a><br /><br/>
    <span>我们为您提供-JS代码,网页图标,网页欣赏模板,SEO优化和各种建站技巧;</span><br />
    <span>懒人建站只收录实用和能提高用户体验的代码</span><br />
    <span>我们只想解放出你的部分写代码时间来思考更高层次的设计,而不是要你懒惰、拼凑。</span>
    </div>
    </body>
    </html>
      

  3.   

    这个代码很长,只好分三次粘贴。这个代码实现的功能是每次调用该页面都会出现弹出窗口,如果var displayMode = "once",则只出现一次,但我想实现24小时弹出一次,不知道将
    displayMode设为 "once"后是不是以后都不弹出了,请大侠指教。
      

  4.   

    程序太长了 没仔细看
    不知道楼主 弹出窗口关闭按钮会不会写(隐藏)如果你会写 就可以在js里编写程序 js里有相应的windows.命令  自己查查我就不帮你查了然后通过windows命令显示出来
      

  5.   

    建议lz去看看jquery...这些代码会精简很多.
      

  6.   

    可以通过cookie操作
    var cookies=document.cookie.split("; ");
    if(cookies.length==0){
       window.open();
       var t=new Date();
       var et=new Date(t.getTime()+24*60*60);
       document.cookie="haveopen=true; expires="et.toGMTString();
    }