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 相关文章推荐
popdiv
Jul 14 Javascript
基于jQuery的一个扩展form序列化到json对象
Dec 09 Javascript
关于jQuery参考实例 1.0 jQuery的哲学
Apr 07 Javascript
js中cookie的添加、取值、删除示例代码
Oct 21 Javascript
jQuery Trim去除字符串首尾空字符的实现方法说明
Feb 11 Javascript
浅谈jquery回调函数callback的使用
Jan 30 Javascript
JS实现合并两个数组并去除重复项只留一个的方法
Dec 17 Javascript
EasyUI学习之Combobox下拉列表(1)
Dec 29 Javascript
vue的事件绑定与方法详解
Aug 16 Javascript
JS简单实现动态添加HTML标记的方法示例
Apr 08 Javascript
vue基于v-charts封装双向条形图的实现代码
Dec 09 Javascript
javascript设计模式 ? 桥接模式原理与应用实例分析
Apr 13 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
聊天室php&amp;mysql(三)
2006/10/09 PHP
从康盛产品(discuz)提取出来的模板类
2011/06/28 PHP
thinkphp5 migrate数据库迁移工具
2018/02/20 PHP
Prototype使用指南之ajax
2007/01/10 Javascript
Mootools 1.2教程 类(一)
2009/09/15 Javascript
为jQuery.Treeview添加右键菜单的实现代码
2010/10/22 Javascript
Javascript 命名空间模式
2013/11/01 Javascript
手机平板等移动端适配跳转URL的js代码
2014/01/25 Javascript
JQuery实现动态适时改变字体颜色的方法
2015/03/10 Javascript
JavaScript的事件代理和委托实例分析
2015/03/25 Javascript
Jquery效果大全之制作电脑健康体检得分特效附源码下载
2015/11/02 Javascript
浅谈js中字符和数组一些基本算法题
2016/08/15 Javascript
jQuery学习笔记——jqGrid的使用记录(实现分页、搜索功能)
2016/11/09 Javascript
bootstrap模态框实现拖拽效果
2016/12/14 Javascript
详解Angular调试技巧之报错404(not found)
2018/01/31 Javascript
vuejs实现标签选项卡动态更改css样式的方法
2018/05/31 Javascript
使用FormData实现上传多个文件
2018/12/04 Javascript
Vue中对iframe实现keep alive无刷新的方法
2019/07/23 Javascript
javascript二维数组和对象的深拷贝与浅拷贝实例分析
2019/10/26 Javascript
[37:35]DOTA2上海特级锦标赛A组资格赛#1 Secret VS MVP.Phx第二局
2016/02/25 DOTA
[58:21]DOTA2亚洲邀请赛 4.3 突围赛 Liquid vs VGJ.T 第二场
2018/04/04 DOTA
[45:44]完美世界DOTA2联赛PWL S2 FTD vs PXG 第一场 11.27
2020/12/01 DOTA
对python dataframe逻辑取值的方法详解
2019/01/30 Python
在python中实现调用可执行文件.exe的3种方法
2019/07/07 Python
Python文本处理简单易懂方法解析
2019/12/19 Python
python logging.basicConfig不生效的原因及解决
2020/02/20 Python
完美解决pyinstaller打包报错找不到依赖pypiwin32或pywin32-ctypes的错误
2020/04/01 Python
css3实现多个元素依次显示效果
2017/12/12 HTML / CSS
HTML5移动端开发中的Viewport标签及相关CSS用法解析
2016/04/15 HTML / CSS
Carter’s官方旗舰店:美国受欢迎的婴童服装品牌
2018/01/21 全球购物
MADE荷兰:提供原创设计师家具
2018/04/03 全球购物
幼儿园教师奖惩制度
2014/02/01 职场文书
会计专业应届生自荐信
2014/06/28 职场文书
应急管理工作总结2015
2015/05/04 职场文书
python3.7.2 tkinter entry框限定输入数字的操作
2021/05/22 Python
MySQL连接查询你真的学会了吗?
2021/06/02 MySQL