javascript 新浪背投广告实现代码


Posted in Javascript onJuly 07, 2009

今天查看了下新浪的js代码,发现一个背投的广告类代码,不论是从学习角度还是使用角度都是不错的,但发现了一个问题,会被屏蔽的。
下面是具体的js类代码

/* 
轮播背投类 RotatorPB v3.1 
Update by Dakular <shuhu@staff.sina.com.cn> 2008-8-25 
格式:new RotatorPB(广告数组) 
说明:第一次访问随机出现,以后访问顺序轮播;自动过滤过期广告;cookie时间24小时;商业广告数量不足时不显示 
*/ 
if(typeof(RotatorPB)!='function'){ 
    var RotatorPB=function (rad){ 
        this.ary = new Array(); 
        this.date = new Date(); 
        this.w = rad.width; 
        this.h = rad.height; 
        this.num = rad.num; 
        this.o = rad.length; 
        this.id = RotatorPB.id++; 
        this.m = 'rpb_'+this.id; 
        this.n = new Array(); 
        this.L = new Date(); 
        this.e = 0; 
        var f; 
        var D = false; 
        var nn = 0; 
        //过滤无效广告 
        for(var i=0; i<rad.length; i++){ 
            var start = RotatorPB.strToDate(rad[i][2].replace('<startdate>','').replace('</startdate>','')); 
            var end = RotatorPB.strToDate(rad[i][3].replace('<enddate>','').replace('</enddate>',''),true); 
            if(this.date>start && this.date<end && (this.num==null || this.ary.length<this.num) ){ 
                this.ary.push([rad[i][0], rad[i][1], rad[i][4]]); 
            } 
        } 
        this.o = this.ary.length; 
        //取id 
        for(var i=0;i<this.o;i++){ 
            f=this.m+'_'+(i+1); 
            g=RotatorPB.G(f); 
            if(g!=''){ 
                this.n[i]=g; 
                D=true; 
            }else { 
                this.n[i]=0; 
            } 
        } 
        if(!D){ 
            var r=Math.ceil(Math.random()*this.o); 
            var t=this.m+'_'+r; 
            RotatorPB.S(t,this.L.getTime(),1440); 
            this.e=r; 
            if(this.o==1){RotatorPB.S('s_dl',r,1440);} 
            //return r; 
        }else { 
            var R=this.n.join(',').split(','); 
            var k=R.sort(); 
            var max=Number(k[k.length-1]); 
            var min=Number(k[0]); 
            var F; 
            for(var i=0;i<this.n.length;i++){ 
                if(max==this.n[i]){ 
                    F=i+1; 
                    break; 
                } 
            } 
            if(typeof(F)!='undefined'){ 
                G=this.m+'_'+F; 
                H=Number(RotatorPB.G(G)); 
                I=F%this.o+1; 
                J=this.m+'_'+I; 
                RotatorPB.S(J,this.L.getTime(),1440); 
                if(this.o==1){ 
                    I=-RotatorPB.G('s_dl'); 
                    if(I==0){I=1;RotatorPB.S('s_dl',1,1440);} 
                    RotatorPB.S('s_dl',I,1440); 
                } 
                this.e=I; 
                //return I; 
            } 
        } 
        //Show AD 
        if(this.e==0 || this.ary.length==0) return; //如果没有广告则不显示 
        if(this.e==-1) return; //当只有一个广告时:始终显示第一个/奇数次刷新显示 
        var n = this.e-1; 
        var btsrc = this.ary[n][0]; 
        var bturl = this.ary[n][1]; 
        var bttype = btsrc.substring(btsrc.length-3).toLowerCase(); 
        if(bttype=='.js'){ //js 
            document.write('<script language="javascript" type="text/javascript" src="'+btsrc+'"></scr'+'ipt>'); return; 
        }else if(bttype!='htm' && bttype!='tml'){ 
            sinabturl = "http://d1.sina.com.cn/d1images/pb/pbv4.html?"+bturl+"${}"+bttype+"${}"+btsrc; 
        }else{ 
            sinabturl = btsrc; 
        } 
        try{ 
            aryADSeq.push("openWindowBack()"); 
        }catch(e){ 
            openWindowBack(); 
        } 
        if(this.ary[n][2]!=""){ //监测计数 
            var oImg = new Image(); 
            oImg.src = this.ary[n][2]; 
        } 
    }; 
    RotatorPB.id=1; 
    RotatorPB.G=function (N){ 
        var c=document.cookie.split("; "); 
        for(var i=0;i<c.length;i++){ 
            var d=c[i].split("="); 
            if(d[0]==N)return unescape(d[1]); 
        }return ''; 
    }; 
    RotatorPB.S=function (N,V,Q){ 
        var L=new Date(); 
        var z=new Date(L.getTime()+Q*60000); 
        document.cookie=N+"="+escape(V)+"; path=/; expires="+z.toGMTString()+";"; 
    }; 
    RotatorPB.strToDate = function(str,ext){ 
        var arys = new Array(); 
        arys = str.split('-'); 
        var newDate = new Date(arys[0],arys[1]-1,arys[2],9,0,0); 
        if(ext){ 
            newDate = new Date(newDate.getTime()+1000*60*60*24); 
        } 
        return newDate; 
    } 
    var openWindowBack = function(){ 
        var popUpWin2 = open(sinabturl, (window.name!="popUpWin2")?"popUpWin2":"", "width=1,height=1,top=4000,left=3000"); 
    } 
};

具体的调用代码:

<script src="rotator_pb.js"></script> 
<SCRIPT language=javascript type=text/javascript> 
//<![CDATA[ 
var rpb = new Array(); 
rpb.num = 2; //轮播数量 
<!--2220E7B88D58-->//背投广告创意 
rpb.push(["http://img.3water.com/demo/images/beitou.jpg", "https://3water.com", "<startdate>2009-4-15</startdate>", "<enddate>2009-8-15</enddate>", ""]); 
<!--$$ litong/2009-4-15 ~ 2009-8-15/B $--> 
new RotatorPB(rpb); 
//]]> 
</SCRIPT>

上面的beitou.jpg是图片的地址,后面的是链接, 开始日期 结束日期什么的大家参考下就可以了。
Javascript 相关文章推荐
JS判断数组中是否有重复值得三种实用方法
Aug 16 Javascript
深入理解JavaScript系列(50):Function模式(下篇)
Mar 04 Javascript
jquery实现的仿天猫侧导航tab切换效果
Aug 24 Javascript
基于JQuery实现图片上传预览与删除操作
May 24 Javascript
jQuery插件Validation快速完成表单验证的方式
Jul 28 Javascript
javascript用rem来做响应式开发
Jan 13 Javascript
剖析Angular Component的源码示例
Mar 23 Javascript
详解如何理解vue的key属性
Apr 14 Javascript
JS实现在线ps功能详解
Jul 31 Javascript
Vue仿微信app页面跳转动画效果
Aug 21 Javascript
理解JavaScript中的Proxy 与 Reflection API
Sep 21 Javascript
利用js实现简单开关灯代码
Nov 23 Javascript
JavaScript 对象、函数和继承
Jul 07 #Javascript
js 日期转换成中文格式的函数
Jul 07 #Javascript
javascript 面向对象思想 附源码
Jul 07 #Javascript
jquery BS,dialog控件自适应大小
Jul 06 #Javascript
javascript 浏览器判断 绑定事件 arguments 转换数组 数组遍历
Jul 06 #Javascript
javascript 写类方式之十
Jul 05 #Javascript
javascript 写类方式之九
Jul 05 #Javascript
You might like
WML,Apache,和 PHP 的介绍
2006/10/09 PHP
ThinkPHP无限级分类原理实现留言与回复功能实例
2014/10/31 PHP
PHP将字符分解为多个字符串的方法
2014/11/22 PHP
linux下实现定时执行php脚本
2015/02/13 PHP
laravel model 两表联查示例
2019/10/24 PHP
RGB颜色值转HTML十六进制(HEX)代码的JS函数
2009/04/25 Javascript
a标签的href和onclick 的事件的区别介绍
2013/07/26 Javascript
实例解析jQuery插件EasyUI最常用的表单验证规则
2015/11/29 Javascript
javascript实现html页面之间参数传递的四种方法实例分析
2015/12/15 Javascript
jquery表单插件Autotab使用方法详解
2016/06/24 Javascript
卸载安装Node.js与npm过程详解
2016/08/15 Javascript
使用JS实现图片展示瀑布流效果(简单实例)
2016/09/06 Javascript
原生js实现可爱糖果数字时间特效
2016/12/30 Javascript
jQuery中的一些小技巧
2017/01/18 Javascript
为你的微信小程序体积瘦身详解
2017/05/20 Javascript
AngularJs用户输入动态模板XSS攻击示例详解
2018/04/21 Javascript
vue.js 实现点击按钮动态添加li的方法
2018/09/07 Javascript
ES6知识点整理之Proxy的应用实例详解
2019/04/16 Javascript
深入学习JavaScript 高阶函数
2019/06/11 Javascript
原生js实现抽奖小游戏
2019/06/27 Javascript
JS原型对象操作实例分析
2020/06/06 Javascript
Python3访问并下载网页内容的方法
2015/07/28 Python
python简单操作excle的方法
2018/09/12 Python
对PyQt5的输入对话框使用(QInputDialog)详解
2019/06/25 Python
Django多数据库配置及逆向生成model教程
2020/03/28 Python
基于python图书馆管理系统设计实例详解
2020/08/05 Python
Links of London官方网站:英国标志性的珠宝品牌
2017/04/09 全球购物
德国家具购物网站:Möbel Höffner
2019/08/26 全球购物
JSF面试题:如何管量web层中的Bean,用什么标签。如何通过jsp页面与Bean绑定在一起进行处理?
2012/10/05 面试题
大学应届生的自我评价
2014/03/06 职场文书
先进党组织事迹材料
2014/12/26 职场文书
实习生个人总结范文
2015/02/28 职场文书
银行稽核岗位职责
2015/04/13 职场文书
感恩教师节主题班会
2015/08/12 职场文书
2016读书月活动心得体会
2016/01/14 职场文书
Nginx图片服务器配置之后图片访问404的问题解决
2022/03/21 Servers