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 相关文章推荐
有一段有意思的代码-javascript现实多行信息
Aug 26 Javascript
Sublime Text 3常用插件及安装方法
Dec 16 Javascript
基于jQuery实现Ajax验证用户名是否存在实例
Mar 30 Javascript
jQuery用户头像裁剪插件cropbox.js使用详解
Jun 07 jQuery
基于node下的http小爬虫的示例代码
Jan 11 Javascript
详解nuxt sass全局变量(公共scss解决方案)
Jun 27 Javascript
关于AngularJS中ng-repeat不更新视图的解决方法
Sep 30 Javascript
javascript动态创建对象的属性详解
Nov 07 Javascript
Angular8路由守卫原理和使用方法
Aug 29 Javascript
js实现经典贪吃蛇小游戏
Mar 19 Javascript
封装 axios+promise通用请求函数操作
Aug 11 Javascript
解决vuex改变了state的值,但是页面没有更新的问题
Nov 12 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
一个ORACLE分页程序,挺实用的.
2006/10/09 PHP
劣质的PHP代码简化
2010/02/08 PHP
PHP检测一个数组有没有定义的方法步骤
2019/07/20 PHP
基于jquery的复制网页内容到WORD的实现代码
2011/02/16 Javascript
js的flv视频播放器插件使用方法
2015/06/23 Javascript
基于JavaScript实现表单密码的隐藏和显示出来
2016/03/02 Javascript
jQuery根据表单name获取值的方法
2016/05/24 Javascript
用headjs来管理和加载js 提高网站加载速度
2016/11/29 Javascript
jQuery如何跳转到另一个网页 就这么简单
2016/12/28 Javascript
React数据传递之组件内部通信的方法
2017/12/31 Javascript
js与jquery获取input输入框中的值实例讲解
2020/02/27 jQuery
js实现前端界面导航栏下拉列表
2020/08/27 Javascript
原生JS实现弹幕效果的简单操作指南
2020/11/10 Javascript
JavaScript实现点击切换功能
2021/01/27 Javascript
[01:10]DOTA2英雄背景故事第四期之混沌法则混沌骑士
2020/07/16 DOTA
python查询mysql中文乱码问题
2014/11/09 Python
读写json中文ASCII乱码问题的解决方法
2016/11/05 Python
利用Python暴力破解zip文件口令的方法详解
2017/12/21 Python
python解决pandas处理缺失值为空字符串的问题
2018/04/08 Python
python使用Plotly绘图工具绘制散点图、线形图
2019/04/02 Python
Python爬虫UA伪装爬取的实例讲解
2021/02/19 Python
解决python的空格和tab混淆而报错的问题
2021/02/26 Python
一款纯css3实现的非常实用的鼠标悬停特效演示
2014/11/05 HTML / CSS
美国儿童运动鞋和服装零售商:Kids Foot Locker
2017/08/05 全球购物
麦当劳印度网上订餐:McDelivery
2020/03/16 全球购物
SCHIESSER荷兰官方网站:德国内衣专家
2020/10/09 全球购物
销售人员获奖感言
2014/02/05 职场文书
幼儿教师师德师风演讲稿
2014/08/22 职场文书
2014县政府领导班子对照检查材料思想汇报
2014/09/25 职场文书
海南召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
2014幼儿园大班工作总结
2014/11/10 职场文书
幼儿园毕业致辞
2015/07/29 职场文书
励志语录:时光飞逝,请学会珍惜所有的人和事
2020/01/16 职场文书
go 实现简易端口扫描的示例
2021/05/22 Golang
为什么代码规范要求SQL语句不要过多的join
2021/06/23 MySQL
Mysql 8.x 创建用户以及授予权限的操作记录
2022/04/18 MySQL