如何在jQuery中重复函数调用

时间:2013-01-26 13:47:50

标签: jquery jquery-animate

我有这段代码:

<script type="text/javascript" src="http://code.jquery.com/jquery-1.4.3.min.js"></script>
<script type="text/javascript">
    $(document).ready(function() { 
        function loop(){
            $('#picOne').fadeIn(0).fadeOut(8000);
            $('#picTwo').delay(2000).fadeIn(6000).fadeOut(5000);
            $('#picTree').delay(10000).fadeIn(2000).fadeOut(16000);
            $('#picFour').delay(12000).fadeIn(16000).fadeOut(5000);
        }
        loop();
    });
</script>

但是当最后一张照片淡出时,代码不再重复。有什么问题?

3 个答案:

答案 0 :(得分:7)

假设您希望每个元素的动画持续时间相同:

var $elements = $('#picOne, #picTwo, #picTree, #picFour');

function anim_loop(index) {
    // Get the element with that index and do the animation
    $elements.eq(index).fadeIn(1000).delay(3000).fadeOut(1000, function() { 
        // Kind of recursive call, increasing the index and keeping in the
        // the range of valid indexes
        anim_loop((index + 1) % $elements.length);
    });
}

anim_loop(0); // start with the first element

我不知道动画究竟应该如何,但我希望它能使概念清晰。

更新:要在特定时间段内同时淡出图像,请使用setTimeout并在回调中调用fadeOutanim_loop:< / p>

$elements.eq(index).fadeIn(1000, function() {
    var $self = $(this);
    setTimeout(function() {
        $self.fadeOut(1000);
        anim_loop((index + 1) % $elements.length);
    }, 3000);
});

DEMO

答案 1 :(得分:0)

没有任何问题,只能调用一次函数。

如果您想循环播放,可以使用setInterval()setTimeout()

setInterval(function(){loop()}, 16000);

function loop(){
     $('#picOne').fadeIn(0).fadeOut(8000);
     $('#picTwo').delay(2000).fadeIn(6000).fadeOut(5000);
     $('#picTree').delay(10000).fadeIn(2000).fadeOut(16000);
     $('#picFour').delay(12000).fadeIn(16000).fadeOut(5000);

}

function loop(){
     $('#picOne').fadeIn(0).fadeOut(8000);
     $('#picTwo').delay(2000).fadeIn(6000).fadeOut(5000);
     $('#picTree').delay(10000).fadeIn(2000).fadeOut(16000);
     $('#picFour').delay(12000).fadeIn(16000).fadeOut(5000);
 setTimeout(function(){loop()}, 16000);
}

在这两种情况下,每16 seconds = 16000 miliseconds都会调用函数。

答案 2 :(得分:0)

我想说这个功能确实运行良好,无论谁做了,都做得很好。我编辑了这个演示,它适用于图片。

<div id="picOne">
 <img id="picOne" src="http://www.phphq.net/demos/phAlbum/album/Windows%20Wallpapers/Missing/Waterfall.jpg"/></div>
<div id="picTwo">
<img id="picTwo" src="http://newevolutiondesigns.com/images/freebies/colorful-background-21.jpg"/></div>
<div id="picTree">
 <img id="picTree" src="http://www.phphq.net/demos/phAlbum/album/Windows%20Wallpapers/Missing/Waterfall.jpg"/></div>
  <div id="picFour">
<img id="picFour" src="http://www.photoinpixel.com/mypicture/amazing-background-wallpapers.jpg"/></div>

功能

var $elements = $('#picOne, #picTwo, #picTree, #picFour');

function anim_loop(index) {
    $elements.eq(index).fadeIn(1000, function() {
        var $self = $(this);
        setTimeout(function() {
            $self.fadeOut(1000);
            anim_loop((index + 1) % $elements.length);
        }, 3000);
    }); }

anim_loop(0); // start with the first element