jquery - 如何在 jquery 中级联动画

标签 jquery animation cascade infinite-loop

我创建了 3 个 div 元素,我需要一组图像来穿过这些框,通过在一个框中显示图像,然后是下一个,然后每 5 秒无限循环显示下一个图像,逐个移动。

我希望图像一个接一个地淡出(在触发下一个框淡出之前有半秒的间隙),所以看起来它们是级联淡出的,我希望淡出持续一秒钟,然后让该框中的新图像要淡入,大约需要一秒钟,下一个框会以半秒的间隔触发淡入。

我让它们循环,但没有级联,有人可以为我提供问题的解决方案吗?以下是我当前的代码:

<div id="box1"></div><div id="box2"></div><div id="box3"></div>
<script type="text/javascript">
//<![CDATA[
var test = ['img1.jpg','img2.jpg','img3.jpg'];
function loopImages()
{
    // swap image positions in array
    var fimg = test.shift();
    test.push(fimg);
    for (a in test) {
        var newimage = $('<img />').attr('src',test[a]);
        var currbox = $('#box' + (Math.floor(a)+1));
        //first fade out
        currbox.find('img').fadeTo('slow',0);
        // then add new image
        currbox.empty().append(newimage);   
    }
    // loop every 5 seconds
    setTimeout("loopImages()",5000);
}
loopImages();
//]]>
</script>

最佳答案

像这样的事情应该可以解决问题:

var test = ['img1.jpg','img2.jpg','img3.jpg'];
function loopImages() {
    var fimg = test.shift();
    test.push(fimg);
    $.each(test, function(i, img) {
        var newimage = $('<img />').attr('src',img);
        $('#box' + (i+1)).find('img').delay(i*1000).fadeTo('slow',0, function() {
          $(this).html(newimage); //shortcut for .empty().append()
        });
    });
    setTimeout(loopImages, 5000);
}
$(loopImages);

使用.delay()并乘以您在数组中的索引,您的动画将交错排列。另外,我猜你想在淡入淡出完成后执行更改操作,所以在 .fadeTo() 中执行此操作。回调。

其他更改:当文档准备好时运行 loopImages,将引用(不是字符串)传递给 setTimeout() ,并使用传统的 for 循环来迭代数组(这里不要使用 for...in,它是 for >枚举)。

关于jquery - 如何在 jquery 中级联动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4448883/

相关文章:

jquery - Kendo Ui Grid 日期时间转换问题

jquery - Bootstrap根据屏幕尺寸显示某些行?

android - 使用图像的椭圆路径动画

android - Activity 之间的 slider 动画

javascript - 滚动计数器递增 1

jquery - 滚动时降低div的高度

JQuery Mobile data-rel ="back"无法在对话框中工作

MySQL - 无法创建表(errno : 150) - Foreign key constraints

php - 如何在php、mysql中制作多级菜单?

java - Hibernate - 设置级联只持续一个 session