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 相关文章推荐
基于prototype的validation.js发布2.3.4新版本,让你彻底脱离表单验证的烦恼
Dec 06 Javascript
火狐浏览器(firefox)下获得Event对象以及keyCode
Nov 13 Javascript
关于javascript document.createDocumentFragment()
Apr 04 Javascript
JQuery中html()方法使用不当带来的陷阱
Apr 07 Javascript
5个javascript的数字格式化函数分享
Dec 07 Javascript
JS实现双击编辑可修改状态的方法
Aug 14 Javascript
jQuery实现网页顶部固定导航效果代码
Dec 24 Javascript
JavaScript中eval函数的问题
Jan 31 Javascript
Angular.js回顾ng-app和ng-model使用技巧
Apr 26 Javascript
JavaScript知识点总结(六)之JavaScript判断变量数据类型
May 31 Javascript
原生JS与jQuery编写简单选项卡
Oct 30 jQuery
js实现左右轮播图
Jan 09 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
Snoopy类使用小例子
2008/04/15 PHP
php判断输入不超过mysql的varchar字段的长度范围
2011/06/24 PHP
php5.2 Json不能正确处理中文、GB编码的解决方法
2014/03/28 PHP
thinkphp5.1框架模板布局与模板继承用法分析
2019/07/19 PHP
PHP ob缓存以及ob函数原理实例解析
2020/11/13 PHP
JScript 脚本实现文件下载 一般用于下载木马
2009/10/29 Javascript
cnblogs csdn 代码运行框实现代码
2009/11/02 Javascript
人人网javascript面试题 可以提前实现下
2012/01/05 Javascript
jQuery中delegate()方法用法实例
2015/01/19 Javascript
使用HTML+CSS+JS制作简单的网页菜单界面
2015/07/27 Javascript
基于jquery实现动态竖向柱状条特效
2016/02/12 Javascript
Jquery ui datepicker设置日期范围,如只能隔3天【实现代码】
2016/05/04 Javascript
JavaScript中子对象访问父对象的方式详解
2016/09/01 Javascript
jQuery插件DataTable使用方法详解(.Net平台)
2016/12/22 Javascript
BootStrap表单宽度设置方法
2017/03/10 Javascript
Angular2监听页面大小变化的解决方法
2017/10/09 Javascript
Angular5.1新功能分享
2017/12/21 Javascript
webpack项目轻松混用css module的方法
2018/06/12 Javascript
Vue 与 Vuex 的第一次接触遇到的坑
2018/08/16 Javascript
vue实现登录、注册、退出、跳转等功能
2020/12/23 Vue.js
[01:02:48]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 LGD vs OG
2018/04/02 DOTA
python文件和目录操作函数小结
2014/07/11 Python
Python 内置函数memoryview(obj)的具体用法
2017/11/23 Python
Python基于列表list实现的CRUD操作功能示例
2018/01/05 Python
Python实现处理逆波兰表达式示例
2018/07/30 Python
python中类的输出或类的实例输出为这种形式的原因
2019/08/12 Python
如何在python中执行另一个py文件
2020/04/30 Python
Speedo速比涛法国官方网站:泳衣、泳镜、泳帽、泳裤
2019/07/30 全球购物
怀旧香味蜡烛:Homesick
2019/11/02 全球购物
Yahoo-PHP面试题2
2014/12/06 面试题
EJB3推出JPA的原因
2013/10/16 面试题
工厂搬迁方案
2014/05/11 职场文书
副检察长四风问题对照检查材料思想汇报
2014/10/07 职场文书
平遥古城导游词
2015/02/03 职场文书
2015年酒店前台工作总结
2015/04/20 职场文书
鸦片战争观后感
2015/06/09 职场文书