在写一个项目时要用到广告模块,为了不想用ASP生成脚本代码时较麻烦,于是产生了写脚本类的念头,即是用一个类模块的脚本代码去控制所有在同一页面显示的漂浮广告。但在写的过程中发现JS脚本竟然在setTimeout里不能使用类的方法。奇怪,是不是我弄错了还是JS脚本就不能这样??但VBS脚本就可以!我晕……
不说了,贴代码:
[VBS脚本代码]
以下是代码片段: '/****************漂浮广告显示类**************************************************** '/* 作者:死在水中的鱼 '/* 脚本语言:VBS '/* 用法: '/* Set Adver1=New AdverClass '/* Adver1.ObjName="Adver1" '设置当前的对象名 [本身对象变量名] '/* Adver1.ImgType=1 '图片的类型 0=普通图片 1=Flash动画 '/* Adver1.ImageWidth=299 '图片的宽度 '/* Adver1.ImageHeight=87 '图片的高度 '/* ####以下方法显示广告图片(Flash) 对象.PrintHtml "图片地址","链接地址","提示信息" '/* Adver1.PrintHtml "http://edu.qq.com/flash/moto-button.swf","http://www.chinese.bj.cn/' target="_blank" >http://edu.qq.com/flash/moto-button.swf","http://www.chinese.bj.cn/","这是什么" '/*********************************************************************************** Class AdverClass Public DivID Public ObjName Private ObjDiv Public Delay '改变数 Public ImgType Private iStep Private iTop,iLeft,Width,Height Private TopFlag,LeftFlag '广告图片的大小 Public ImageWidth,ImageHeight Private Sub Class_Initialize Randomize DivID=Int(Rnd(Time)*9999+1) Delay=80 Height=document.body.clientHeight Width=document.body.clientWidth iTop=0 iLeft=0 TopFlag=False:LeftFlag=False iStep=3 ImgType=0 '0 是图片 1 是FLASH文件 ImageWidth=0 ImageHeight=0 End Sub Private Sub Class_Terminate End Sub Public Sub ScrollImg() Dim offHeight,offWidth,iRnd offWidth=ObjDiv.offsetWidth offHeight=ObjDiv.offsetHeight ObjDiv.style.left = iLeft + document.body.scrollLeft ObjDiv.style.top = iTop + document.body.scrollTop iRnd=Int(Rnd(Time)*99+1) If iRnd>97 Then TopFlag=Not TopFlag iRnd=Int(Rnd(Time)*9+1) If iRnd>98 Then LeftFlag=Not LeftFlag If TopFlag Then iTop=iTop+iStep*Rnd(Time) Else iTop=iTop-iStep*Rnd(Time) End If If LeftFlag Then iLeft=iLeft+iStep*Rnd(Time) Else iLeft=iLeft-iStep*Rnd(Time) End If If iTop<0 Then iTop=0 TopFlag=True ElseIf iTop>Height-offHeight Then iTop=Height-offHeight TopFlag=False End If If iLeft<0 Then iLeft=0 LeftFlag=True ElseIf iLeft>Width-offWidth Then iLeft=Width-offWidth LeftFlag=False End If End Sub Private Sub Start() setInterval ObjName&".ScrollImg()", Delay End Sub Public Sub PrintHtml(ByVal ImgSrc,ByVal adHref,ByVal adTitle) If ImgType=0 Then Call PrintImageHtml(ImgSrc,adHref,adTitle) Else Call PrintFlashHtml(ImgSrc,adHref,adTitle) End If Execute "Set ObjDiv=document.all.img"&DivID iLeft=Int(Rnd(Time)*(Width-100)+1) iTop=Int(Rnd(Time)*(Height-100)+1) ObjDiv.style.top=iTop ObjDiv.style.left=iLeft Call Start() End Sub Private Sub PrintImageHtml(ByVal ImgSrc,ByVal adHref,ByVal adTitle) If ImageWidth=0 Or Not IsNumeric(ImageWidth) Then ImageWidth="" Else ImageWidth=" width='"&ImageWidth&"'" End If If ImageHeight=0 Or Not IsNumeric(ImageHeight) Then ImageHeight="" Else ImageHeight=" height='"&ImageHeight&"'" End If document.write "" End Sub Private Sub PrintFlashHtml(ByVal ImgSrc,ByVal adHref,ByVal adTitle) If ImageWidth=0 Or Not IsNumeric(ImageWidth) Then ImageWidth=80 End If ImageWidth=" width='"&ImageWidth&"'" If ImageHeight=0 Or Not IsNumeric(ImageHeight) Then ImageHeight=80 End If ImageHeight=" height='"&ImageHeight&"'" document.write "" End Sub End Class |
[JS脚本]
以下是代码片段: //*****************漂浮广告显示类**************************************************** //* 作者:死在水中的鱼 //* 脚本语言:javascript //* 用法: //* var adver=new adverClass //* adver.setObjName("adver"); //这句不能setTime所以没有用 //* adver.setDivID(1); //这句可以不用 //* adver.setImageType(1); //设为0时或不写这句时则是普通图片,1则为Flash动画文件 //* adver.setImagePX(299,87); //设置图片的宽度与高度 //* adver.showAdver("http://edu.qq.com/flash/moto-button.swf","http://www.chinese.bj.cn/' target="_blank" >http://edu.qq.com/flash/moto-button.swf","http://www.chinese.bj.cn/","这是什么"); //* var adver1=new adverClass(); //* adver1.showAdver("img.gif","http://www.chinese.bj.cn/","这是什么"); //* setTimer(); //* //因为类里不能写setTime所以只好拿出来写-_-##(VBS脚本竟然可以。我倒) //* function setTimer(){ //* adver.floatScroll(); //* adver1.floatScroll(); //* setTimeout("setTimer()",80); //* } //*********************************************************************************** function adverClass(){ var objName=""; var imageType=0; var imageWidth=imageHeight=0; var iTop=iLeft=0; var topFlag=leftFlag=false; var divID=0,objDiv=null; var offWidth=offHeight=0; var width=document.body.clientWidth; var height=document.body.clientHeight; var delay=30; //时间的延迟值 var topStep=2,leftStep=3; //一步跨多少 var inter; //此处是当外部不设置divID的值能够确保层的ID是唯一 divID=Math.round(Math.random()*100000) //广告的类型 0=普通图片 1=Flash广告图片 this.setImageType=function(sType){ if(sType!=1&&sType!=0){sType=0;} imageType=sType; } //外部调用的变量名 this.setObjName=function(sName){objName=sName;} //广告图片的高度与宽度 this.setImagePX=function(iWidth,iHeight){ if(!isNaN(iWidth)){ imageWidth=iWidth; }else{ imageWidth=0; } if(!isNaN(iHeight)){ imageHeight=iHeight; }else{ imageHeight=0; } } //设置广告所在层的ID值 this.setDivID=function(iDiv){divID=iDiv;} //主函数,显示广告代码 this.showAdver=function(adImgSrc,adHref,adTitle){ if(imageType==0){ showImageHtml(adImgSrc,adHref,adTitle); }else{ showFlashHtml(adImgSrc,adHref,adTitle); } eval("objDiv=document.all.img"+divID+";"); //取得图片的宽度 offWidth=objDiv.offsetWidth; offHeight=objDiv.offsetHeight; //随机显示广告的开始位置 iLeft=Math.round(Math.random()*(width-offWidth)); iTop=Math.round(Math.random()*(height-offHeight)); objDiv.style.pixelLeft=iLeft; objDiv.style.pixelTop=iTop; //定时开始 //startTimer(); } //主函数,漂浮游动显示广告 this.floatScroll=function(){ var iRnd; iRnd=Math.round(Math.random()*100); //此值是为了能使多图显示时产生不同的轨迹 if(objDiv==null)return; objDiv.style.pixelLeft = iLeft + document.body.scrollLeft; objDiv.style.pixelTop = iTop + document.body.scrollTop; if(iRnd>98){leftFlag=!leftFlag;} iRnd=Math.round(Math.random()*100); if(iRnd>99){topFlag=!topFlag;} if(leftFlag){ iLeft=iLeft+leftStep*Math.random(); }else{ iLeft=iLeft-leftStep*Math.random(); } if(topFlag){ iTop=iTop+topStep*Math.random(); }else{ iTop=iTop-topStep*Math.random(); } if(iLeft<0){ iLeft=0; leftFlag=true; } else if(iLeft>width-offWidth){ iLeft=width-offWidth; leftFlag=false; } if(iTop<0){ iTop=0; topFlag=true; } else if(iTop>height-offHeight){ iTop=height-offHeight; topFlag=false; } } //定时移动广告的图片 function startTimer(){ if(objName=="")return; //alert(objName+".floatScroll();"); //inter=setInterval(objName+".floatScroll()",delay); } //显示图片的HTML代码 function showImageHtml(adImgSrc,adHref,adTitle){ var sWidth,sHeight; if(imageWidth<5){ sWidth=""; }else{ sWidth=" width='"+imageWidth+"'"; } if(imageHeight<5){ sHeight=""; }else{ sHeight=" height='"+imageHeight+"'"; } document.write(""); } //显示Flash文件的HTML代码 function showFlashHtml(adImgSrc,adHref,adTitle){ var sWidth,sHeight; if(imageWidth<5){ sWidth=" width='80'"; }else{ sWidth=" width='"+imageWidth+"'"; } if(imageHeight<5){ sHeight=" height='80'"; }else{ sHeight=" height='"+imageHeight+"'"; } document.write(""); } } |
示例代码(包括两种脚本的使用):
漂浮广告显示脚本类演示