【问题标题】:Animate elements sequentially using CSS3 and jQuery使用 CSS3 和 jQuery 顺序动画元素
【发布时间】:2011-09-17 23:54:03
【问题描述】:

我是 jQuery(以及 CSS3 和其他一切)的初学者,我想知道如何自动为三个不同的元素(在本例中为图像)设置动画,以便它们按顺序一个接一个地出现 - # 1、#2、#3 - 页面加载时。这是我的 CSS:

img#element3 {
    position:absolute;
    opacity:0;
    top:25px;
}

img#element2 {
    position:absolute;
    opacity:0;
    top:270px;
    left:60px;
    margin:10px 0;
}

img#element1 {
    position:absolute;
    opacity:0;
    top:328px;
    left:70px;
    margin:10px 0;
}

对于 jQuery,我尝试修改 this post 中的解决方案,但它不起作用。这是我为 jQuery 所做的:

$(document).ready(handler)
    $("#element3").animate({opacity: "1"}, "slow", function() {
    $("#element2").animate({opacity: "1"}, "slow", function() {
    $("element1").animate({opacity: "1"}, "slow", function() {
    });
});
});

有没有办法只使用 CSS3 动画或过渡来做到这一点?如果没有,使用 jQuery 的正确方法是什么?如何指定顺序和延迟?

【问题讨论】:

    标签: javascript jquery animation css


    【解决方案1】:

    你无法单独使用 CSS 制作分段动画。

    您的代码有很多语法问题。您可以咨询您的错误控制台或使用JSLint等工具。

    我可能会使用...

    $(document).ready(function() {
        $("#element3").fadeIn('slow', function() {
            $("#element2").fadeIn('slow', function() {
                $("#element1").fadeIn('slow');
            });
        });
    });
    

    jsFiddle.

    【讨论】:

    • 哦,哇,以前没用过 JSLint...谢谢!也为 Fiddle +1。
    【解决方案2】:

    如果你使用一个类,或者带有.each() 的多重选择器,会更简洁:

    $(document).ready(function() {
        $("#element3,#element2,#element1").each(function(i) {
            $(this).delay(600*i).animate({opacity: "1"}, "slow");
        });
    });
    

    ...或者如果顺序颠倒:

    $(document).ready(function() {
        $( $("#element3,#element2,#element1").get().reverse() ).each(function(i) {
            $(this).delay(600*i).animate({opacity: "1"}, "slow");
        });
    });
    

    【讨论】:

    • +1 好的替代方法。但不要忘记修复ready() 代码:)
    • @alex:是的,我明白了,但是我因为没有使用.delay() 而搞砸了!固定的。 :o)
    【解决方案3】:

    这完全可以通过 css3 动画实现,不像标记的答案所说的那样。

    以他的解决方案为基础:

    使用keyframesanimation-delay 一个接一个地触发动画。

    @keyframes 'fadein' {
        from { opacity: 0; }
        to { opacity: 1; }
    }
    

    只需将每个元素上的 animation-delay 增加到等于前面元素 animation-duration 值的总和即可。

    当然要确保使用 modernizr 与 js 后备!

    here'swebkit的完整解决方案;根据需要应用其他浏览器前缀。

    【讨论】:

    • 不是只有动画循环才可以吗?否则,元素最后会返回到它们的 opacity:0。第二个和第三个元素可以具有延迟或具有“转发”的持久结束状态,但不能同时具有两者,在这种情况下,它们似乎都需要。
    猜你喜欢
    • 2013-04-20
    • 1970-01-01
    • 1970-01-01
    • 2012-02-24
    • 2013-10-11
    • 1970-01-01
    • 2012-11-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多