2012-06-30 56 views
1

我需要每2秒用随机图像加载PHP文件到<div>带淡入淡出效果,所以我使用javascript和jQuery。我写函数隐藏div,加载文件,而不是显示它,等待2秒,然后它应该再次调用函数,但它只发生一次,然后停止。函数循环中的函数

下面是函数:

function random(){ 
    $("#randomImage1").animate({opacity: '0.0'}).load("../images/randomImage.php").animate({opacity: '1.0'}).delay(2000, function(){ 
    random(); 
}); 
random(); 

回答

4

这样做:

(function random(){ 
    var timer; 
    $("#randomImage1").animate({opacity: '0.0'}).load("../images/randomImage.php", function(){ 
    $(this).animate({opacity: '1'}); 
    timer = setTimeout(random, 2000); 
    }); 
})(); 

在这里,我们创建自调用函数,并调用它里面setTimeout这样它就总是会一次又一次地叫你的图像加载后动画部分完成。一旦加载了所有图像,您将需要拨打clearTimeout(timer)停止运行setTimeout

+0

说“做这个”,并张贴代码是没有意义的。 -1直到你解释为什么**。 –

+2

@AnthonyGrist:继续做-1,我会评论说'如果我看到你的答案,最好能解释+1'。 – Blaster

+0

Upvoting会给人错误的印象 - 我认为答案很有用。没有解释原来的方法有什么问题,问这个问题的人没有学到任何东西;他们只是得到可行的代码。 –

1

尝试load请求后加入setTimeout(random, 2000);完成:

function random(){ 
    var rndImg = $("#randomImage1"); 
    rndImg.fadeOut().load("../images/randomImage.php",function(){ 
     rndImg.fadeIn(); 
     setTimeout(random, 2000); 
    }); 
}; 
random() 
+0

+1正确消失在'.load()' –

-4

你的问题是,你正在尝试使用.delay()作为本地setTimeout()的替代品,这是不是它的意图做。 .delay()函数用于在jQuery动画效果之间添加暂停,而不是延迟另一个函数的执行,并且不接受回调函数。请参阅.delay()函数的jQuery文档。

正如已经覆盖以前的答案,您可以使用本机setInterval()函数来实现你的延迟之后:

function random(){ 
    $("#randomImage1").animate({opacity: '0.0'}).load("../images/randomImage.php").animate({opacity: '1.0'}); 
    setInterval(random, 2000); 
} 
random(); 

注意,这将#randomImage1元素动画回到完全不透明,和即使来自​​的AJAX调用没有返回成功响应,也要设置间隔以再次调用该函数。如果这不是你想要的,你可以移动而不是代码到作为成功回调传递一个匿名函数上​​,就像这样:

function random(){ 
    $("#randomImage1").animate({opacity: '0.0'}).load("../images/randomImage.php", 
    function() { 
     $("#randomImage1").animate({opacity: '1.0'}); 
     setInterval(random, 2000) 
    }); 
} 
random(); 
+0

回调中的图像我希望你不会进一步下调你的重复答案(超过30分钟后发布) – Blaster

+0

@Blaster我真的不介意,如果我这样做,我认为代表的损失是值得尝试改变发布代码的文化是足够的。 –

+0

我同意你的看法,但也应该有一些耐心的文化,以便其他人可以有机会进一步解释他们的答案。你几乎总能看到编辑的答案,在第一次尝试中很难做到完美。您在随后的修改中添加更多详细信息,示例,文档链接等。这会给你带来的只是一个评论的结论,而不是像我在我的第一个评论中对我的回答中的第一条评论所解释的那样的投票。 – Blaster