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切换光标示例代码
Oct 10 Javascript
jquery UI Datepicker时间控件的使用方法(基础版)
Nov 07 Javascript
EasyUi 打开对话框后控件赋值及赋值后不显示的问题解决办法
Jan 19 Javascript
使用JavaScript开发跨平台的桌面应用详解
Jul 27 Javascript
Node.js 使用递归实现遍历文件夹中所有文件
Sep 18 Javascript
利用VS Code开发你的第一个AngularJS 2应用程序
Dec 15 Javascript
vue select二级联动第二级默认选中第一个option值的实例
Jan 10 Javascript
vue弹窗组件使用方法
Apr 28 Javascript
jQuery阻止事件冒泡实例分析
Jul 03 jQuery
jquery实现联想词搜索框和搜索结果分页的示例
Oct 10 jQuery
vue微信分享插件使用方法详解
Feb 18 Javascript
Javascript类型判断相关例题及解析
Aug 26 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
DOTA2 6.87版本后新眼位详解攻略
2020/04/20 DOTA
php 在windows下配置虚拟目录的方法介绍
2013/06/26 PHP
php检测url是否存在的方法
2015/04/14 PHP
PHP简单实现欧拉函数Euler功能示例
2017/11/06 PHP
PHP date_default_timezone_set()设置时区操作实例分析
2020/05/16 PHP
优化javascript的执行速度
2010/01/23 Javascript
js中将具有数字属性名的对象转换为数组
2011/03/06 Javascript
jquer之ajaxQueue简单实现代码
2011/09/15 Javascript
基于jquery实现的文字淡入淡出效果
2013/11/14 Javascript
分享一则javascript 调试技巧
2015/01/02 Javascript
javascript通过元素id和name直接取得元素的方法
2015/04/28 Javascript
JavaScript学习总结之正则的元字符和一些简单的应用
2017/06/30 Javascript
AngularJS 实现点击按钮获取验证码功能实例代码
2017/07/13 Javascript
vue 数组和对象不能直接赋值情况和解决方法(推荐)
2017/10/25 Javascript
详解webpack打包nodejs项目(前端代码)
2018/09/19 NodeJs
对angular4子路由&amp;辅助路由详解
2018/10/09 Javascript
react的滑动图片验证码组件的示例代码
2019/02/27 Javascript
一篇文章带你浅入webpack的DLL优化打包
2020/02/20 Javascript
vue mvvm数据响应实现
2020/11/11 Javascript
[05:22]DOTA2 2015国际邀请赛中国区预选赛首日TOP10
2015/05/26 DOTA
[01:38:19]夜魇凡尔赛茶话会 第五期
2021/03/11 DOTA
Python运行的17个时新手常见错误小结
2012/08/07 Python
用Python编写简单的定时器的方法
2015/05/02 Python
详细解读Python的web.py框架下的application.py模块
2015/05/02 Python
Python上下文管理器和with块详解
2017/09/09 Python
使用Python更换外网IP的方法
2018/07/09 Python
Selenium元素定位的30种方式(史上最全)
2020/05/11 Python
Tensorflow使用Anaconda、pycharm安装记录
2020/07/29 Python
CSS3 @media的基本用法总结
2019/09/10 HTML / CSS
波兰在线运动商店:YesSport
2020/07/23 全球购物
农行实习自我鉴定
2013/09/22 职场文书
中专自我鉴定
2014/02/05 职场文书
婚前财产公证书
2014/04/10 职场文书
新闻传媒系求职信范文
2014/04/19 职场文书
关于梦想的演讲稿
2014/05/05 职场文书
话题作文之成长
2019/12/09 职场文书