写了段代码,想在1s后执行一个函数,实现的是一个图片的移动效果,有三个图,第一个移动后过1s,第二个移动,过2秒后,第三个移动,要一直移动下去,直到跑到另一个页面才停止,如下:
setTimeout(demo_one.moveFunc1,10);
 setInterval(moveFunc1,1000);
setTimeout(demo_one.moveFunc2,1000);
 setInterval(moveFunc2,1000);
setTimeout(demo_one.moveFunc3,2000);
 setInterval(moveFunc3,1000);moveFunc1= function(){
    moveImg('img1', '40px', '10%', 2000); 
}
moveFunc2= function(){
    moveImg('img2', '40px', '10%', 2000);
}
moveFunc3= function(){
    moveImg('img3', '40px', '10%', 2000);
}
其中moveImg是用来让图片移动一下,可是为什么第二个和第三个总是一起的,好像setTimeout没起作用,如果没有最后一句 setInterval(moveFunc3,1000),那么,只跑一次是对的,第三个图是第三次出现,然后移动,但是第三个图也需要循环的移动,加了 setInterval(moveFunc3,1000)后,第三个图和第二个图是叠在一起的,说明时间上是同时移动的,为什么最后一句的 setInterval(moveFunc3,1000);加上后会变成这样?

解决方案 »

  1.   

    你这么多句的起始时间是一样的,应该是
    setTimeout(fn1,1000);
    setTimeout(fn2,2000);
    setTimeout(fn3,3000);
    这样才会每隔1秒依次调用。
      

  2.   

    我上面的时间是用设置啊,setTimeout的时间上来说,就是停几秒再执行,这个错开应该是没问题的,问题是每次我调用setInterval的时候,我发现第二个和第三个的时间上我写错了,应该是最后一个setinterval的时间改成两秒就对了,anyway,谢谢你的回答~~
      

  3.   

    setTimeout(demo_one.moveFunc2,1000);
     setInterval(moveFunc2,1000);
    setTimeout(demo_one.moveFunc3,2000);
     setInterval(moveFunc3,1000);执行上面4句代码几乎是同时的。意思就是描红的计时器由于延时一样,基本描红的计时器的代码几乎同时运行,所以第二个和第三个总是一起的,那个时间差你几乎无法察觉
      

  4.   

    对的,但是有个问题就是,如果要重复执行的这个动画有叠加的效果,叠加效果指的是在移动的时候慢慢隐藏,那么用了个自定义的队列,就是说,如果1--3s的过成中,从第二秒开始隐藏,那么应该是写成setTimeout(function(){$('#img1').animate({opacity : 0.3}, {duration : 1000,queue : false});},2000);
    那把这句话放在moveitem里边的话,在重复执行的过程中,这个时间应该动态变化,第一次2000,第二次4000,第三次6000,怎么实现,这种效果的重复执行呢?
      

  5.   

    对的,但是有个问题就是,如果要重复执行的这个动画有叠加的效果,叠加效果指的是在移动的时候慢慢隐藏,那么用了个自定义的队列,就是说,如果1--3s的过成中,从第二秒开始隐藏,那么应该是写成setTimeout(function(){$('#img1').animate({opacity : 0.3}, {duration : 1000,queue : false});},2000);
    那把这句话放在moveitem里边的话,在重复执行的过程中,这个时间应该动态变化,第一次2000,第二次4000,第三次6000,怎么实现,这种效果的重复执行呢?
      

  6.   

    对的,但是有个问题就是,如果要重复执行的这个动画有叠加的效果,叠加效果指的是在移动的时候慢慢隐藏,那么用了个自定义的队列,就是说,如果1--3s的过成中,从第二秒开始隐藏,那么应该是写成setTimeout(function(){$('#img1').animate({opacity : 0.3}, {duration : 1000,queue : false});},2000);
    那把这句话放在moveitem里边的话,在重复执行的过程中,这个时间应该动态变化,第一次2000,第二次4000,第三次6000,怎么实现,这种效果的重复执行呢?