this.timer1=window.setTimeout("this.movechip(" + index1 + ")",100);这种写法当然是错的
http://community.csdn.net/Expert/topic/3191/3191873.xml?temp=.5898096

解决方案 »

  1.   

    按照您的提示,已对程序作了修改:但是仍然出现错误,报错说"this.aChips对象为空或不是对象";我想我在this.timer1=window.setTimeout("this.movechip(" + index1 + ")",100);
    传的是整形的参数,并不是对象,是不是不对.
    修改后的代码如下:
    var _st = window.setTimeout;
    window.setTimeout = function(fRef, mDelay) {
    if(typeof fRef == 'function'){
    var argu = Array.prototype.slice.call(arguments,2);
    var f = (function(){ fRef.apply(null, argu); });
    return _st(f, mDelay);
    }
    return _st(fRef,mDelay);
    }function Chip(chipname,width,height)
    {
    this.vmin=2;
    this.vmax=5;
    this.vr=2;
    this.named=chipname;
    this.vx=this.vmin+this.vmax*Math.random();
    this.vy=this.vmin+this.vmax*Math.random();
    this.w=width;
    this.h=height;
    this.xx=0;
    this.yy=0;
    this.timer1=null;

    }function Chips(chipsname)
    {
    this.obj = chipsname;
    this.aChips=[];
    this.brOK=false;
    this.mie=false;
    this.aver=parseInt(navigator.appVersion.substring(0,1));
    this.aname=navigator.appName;
    }Chips.prototype.movechip=function(index1)
    {
    chip=this.aChips[index1-1];
    if(this.brOK)
    {
    //eval("chip="+chipname);
    //window.alert(chip.named);
    if(!this.mie)
    {
    pageX=window.pageXOffset;
    pageW=window.innerWidth;
    pageY=window.pageYOffset;
    pageH=window.innerHeight;
    }
    else
    {
    pageX=window.document.body.scrollLeft;
    pageW=window.document.body.offsetWidth-8;
    pageY=window.document.body.scrollTop;
    pageH=window.document.body.offsetHeight;
    }
    chip.xx=chip.xx+chip.vx;
    chip.yy=chip.yy+chip.vy;
    chip.vx+=chip.vr*(Math.random()-0.5);
    chip.vy+=chip.vr*(Math.random()-0.5);
    if(chip.vx>(chip.vmax+chip.vmin))
    chip.vx=(chip.vmax+chip.vmin)*2-chip.vx;
    if(chip.vx<(-chip.vmax-chip.vmin)) 
    chip.vx=(-chip.vmax-chip.vmin)*2-chip.vx;
    if(chip.vy>(chip.vmax+chip.vmin))
    chip.vy=(chip.vmax+chip.vmin)*2-chip.vy;
    if(chip.vy<(-chip.vmax-chip.vmin)) 
    chip.vy=(-chip.vmax-chip.vmin)*2-chip.vy;
    if(chip.xx<=pageX)
    {
    chip.xx=pageX;
    chip.vx=chip.vmin+chip.vmax*Math.random();
    }
    if(chip.xx>=pageX+pageW-chip.w)
    {
    chip.xx=pageX+pageW-chip.w;
    chip.vx=-chip.vmin-chip.vmax*Math.random();
    }
    if(chip.yy<=pageY)
    {
    chip.yy=pageY;
    chip.vy=chip.vmin+chip.vmax*Math.random();
    }
    if(chip.yy>=pageY+pageH-chip.h)
    {
    chip.yy=pageY+pageH-chip.h;
    chip.vy=-chip.vmin-chip.vmax*Math.random();
    }
    if(!this.mie)
    {
    eval('document.'+chip.named+'.top ='+chip.yy);
    eval('document.'+chip.named+'.left='+chip.xx);
    }
    else
    {
    eval('document.all.'+chip.named+'.style.pixelLeft='+chip.xx);
    eval('document.all.'+chip.named+'.style.pixelTop ='+chip.yy);
    }
    this.timer1=window.setTimeout(this.movechip,100,index1);
    }
    };
    Chips.prototype.stopme=function(index2)
    {
    if(this.brOK)
    {
    chip=this.aChips[index2-1];
    if(chip.timer1!=null)
    {
    clearTimeout(chip.timer1)
    }
    }
    };
    Chips.prototype.add=function(objectid,imgwidth,imgheight,imgx,imgy,imgtype,FileUrl,LinkUrl)
    {
    var tempstr;
    if (navigator.appName == "Netscape")
    {
    tempstr="<layer id=" + objectid + " top=" + imgy + " width=" + imgwidth + " height=" + imgheight + " left=" + imgx +  ">" ;
    if (imgtype=="0")
    {
    tempstr = tempstr + '<object classid="clsid:D27CDB6E-AE6D-11CF-96B8-444553540000" width="' + imgwidth + '" height=' + imgheight +  '"><param name="_cx" value="4233"><param name="_cy" value="1323"><param name="FlashVars" value="-1"><param name="Movie" value="ad/dx_100.swf"><param name="Src" value="'+ FileUrl +  '"><param name="WMode" value="Window"><param name="Play" value="-1"><param name="Loop" value="-1"><param name="Quality" value="High"><param name="SAlign" value><param name="Menu" value="-1"><param name="Base" value="' + FileUrl + '"><param name="Scale" value="ShowAll"><param name="DeviceFont" value="0"><param name="EmbedMovie" value="0"><param name="BGColor" value><param name="SWRemote" value><param name="AllowScriptAccess" value="always"><param name="wmode" value="transparent"><param name="menu" value="false"></object></layer>';
    }
    else
    {
    tempstr = tempstr + '<a href="' + LinkUrl + '" target=_blank><img src=' + FileUrl + ' width=' + imgwidth + ' height=' + imgheight + ' border=0></a></layer>';
    }
    }
    else
    {
    tempstr='<div  id=' + objectid + ' style="position: absolute;width:' + imgwidth + ';top:' + imgy + ';left:'+ imgx + ';visibility: visible;z-index: 1">';
    if (imgtype=="0")
    {
    tempstr = tempstr + '<object classid="clsid:D27CDB6E-AE6D-11CF-96B8-444553540000" width="' + imgwidth + '" height=' + imgheight +  '"><param name="_cx" value="4233"><param name="_cy" value="1323"><param name="FlashVars" value="-1"><param name="Movie" value="ad/dx_100.swf"><param name="Src" value="'+ FileUrl +  '"><param name="WMode" value="transparent"><param name="Play" value="-1"><param name="Loop" value="-1"><param name="Quality" value="High"><param name="SAlign" value><param name="Menu" value="-1"><param name="Base" value="'+ FileUrl +  '"><param name="Scale" value="ShowAll"><param name="DeviceFont" value="0"><param name="EmbedMovie" value="0"><param name="BGColor" value><param name="SWRemote" value><param name="AllowScriptAccess" value="always"></object></div>';
    }
    else
    {
    tempstr =tempstr + '<a href="' + LinkUrl + '" target=_blank><img src=' + FileUrl + ' width=' + imgwidth + ' height=' + imgheight + ' border=0></a></div>';
    }
    }
    document.write(tempstr);
    this.checkbrOK();
    this.aChips[this.aChips.length] = new Chip(objectid,imgwidth,imgheight);
    if(this.brOK)

    this.movechip(this.aChips.length);
    }
    };Chips.prototype.checkbrOK=function()
    {
    if(this.aname.indexOf("Internet Explorer")!=-1)
    {
    if(this.aver>=4) this.brOK=navigator.javaEnabled();
    this.mie=true;
    }
    if(this.aname.indexOf("Netscape")!=-1)
    {
    if(this.aver>=4) this.brOK=navigator.javaEnabled();
    }
    };
    不知道是什么问题,非常感谢您的回答!!
      

  2.   

    非常努力地想看楼主的代码(失败)bad program(没注释啊)而且是否有必要使用对象值得怀疑,javascript只是基于对象的脚本,何必非要写对象呢,问题的复杂程度似乎没有到这个程度吧(纯属郁闷的罗嗦)只发现一个问题Chip定义了timer1(没使用),而Chips的方法中使用了timer1(未定义)心情好再看……
      

  3.   

    其实不编写面向对象也是可以的,只要达到要求就可以了,大家把它拷到html页中,调add方法,会创建一个层,层是漂浮的.也就是现在的那种漂浮广告了,想必不少人也做过了.其中Chips.prototype.add=function(objectid,imgwidth,imgheight,imgx,imgy,imgtype,FileUrl,LinkUrl)的参数依次是对象的id,图片宽,图片高,起始的x位置,起始的x位置,图片的类型(0或1),图片的路径,要链接到的网址.
    我做成面向对象,要想能够动态的创建多个广告(对应就是层),而不是在要加广告时,手工的去改源代码.相信很多人都想这样.但觉得可以实现不了.