使用 Jquery 一个接一个地为 Div 设置动画

Posted

技术标签:

【中文标题】使用 Jquery 一个接一个地为 Div 设置动画【英文标题】:Animate Divs One Right After the Other with Jquery 【发布时间】:2011-05-26 06:58:29 【问题描述】:

我正在尝试为多个 div 设置动画,在页面加载时一个接一个地依次淡入。当我单击转到另一个页面时,我也想反向执行,依次淡出。我该如何在 jquery 中进行设置?

【问题讨论】:

除非您想让您的用户感到沮丧,否则不要在他们点击链接和下一页加载之间添加任何动画。 MS 转换 (msdn.microsoft.com/en-us/library/ms532847%28v=vs.85%29.aspx) 没有起飞是有原因的 【参考方案1】:

很难给你一个例子,因为在 jQuery 中有很多动画方法,但这里有一个简单的例子。动画两个<div>s,一个接一个(在页面加载时):

在此处查看工作示例:http://jsfiddle.net/andrewwhitaker/p7MJv/

html

<div id="animation-one">Hello!</div>
<div id="animation-two">Jquery Animate!</div>

CSS:

#animation-one,
#animation-two

    opacity:0;
    top: 30px;
    width: 400px;
    height: 100px;
    background-color:#00CCCC;
    font-size:35pt;
    position:absolute;


#animation-one

    background-color:#CCCC33;
    top:130px;

javascript

$("#animation-one").animate(
    opacity:1.0, 700,
    function() 
        // Callback function: This is called when 'animation-one'
        // is finished.
        $("#animation-two").animate(
            opacity: 1.0
        , 700);
    
);

这是发生了什么:

两个&lt;div&gt;s 在页面上有CSS opacity: 0 加载页面时,ID 为 animation-one&lt;div&gt; 会在 700 毫秒的时间内从不透明度 0 变为不透明度 1。 animation-ones 动画完成后,另一个&lt;div&gt;(ID 为animation-two)以类似的方式启动动画。

现在,淡出&lt;div&gt;s 是类似的。我假设您的链接只是指向另一个页面,所以我暂停了该链接的以下内容,直到动画完成:

这假设您有一个链接 &lt;a&gt;,其 id 为 next-page,但实际上它可以是任何选择器:

HTML:

<a id="next-page" href="http://www.google.com">Google</a>

JavaScript:

$("#next-page").click(function($event) 
    $event.preventDefault();
    var href = $(this).attr("href");

    $("#animation-two").animate(
        opacity: 0, 700,
        function() 
            // Callback function:  This is called when 'animation-two'
            // is finished.
            $("#animation-one").animate(
                opacity: 0, 700,
                function() 
                    // Direct the user to the link's intended
                    // target.
                    window.location = href;
                );
    )
);

这是发生了什么:

当点击 id next-page 的链接时,会出现与上述类似的动画序列,但相反。 最后一个动画出现后,链接正确跟随。

我认为查看上面链接中的示例应该会有所帮助。另外,请务必查看animate 的文档。

希望有帮助!

编辑: 添加指向另一个示例的链接,因为 OP 想要一次为多个 &lt;div&gt;s 设置动画:http://jsfiddle.net/andrewwhitaker/n3GEB/。这会将通用代码移动到函数中,并有望使示例更易于阅读。

【讨论】:

【参考方案2】:

请注意,jQuery 动画函数将回调作为最终参数。动画完成时调用此函数。您将在此回调中开始为下一个 DIV 设置动画。另一种选择是fxQueues。

离开页面时没有完美的方式来反转动画。您可以通过以下方式为页面上的链接执行此操作:

$("a").click(function()

    var target = $(this).href;
    // Do animation
    // In the final completion callback, do
    window.location.href = target;
);

(请注意我不保证这有效,它只是伪代码)

【讨论】:

回调函数的例子请看这个问题:***.com/questions/668104/jquery-queueing-animations【参考方案3】:

我会考虑使用回调和队列。

看看这个:

jQuery queue events http://api.jquery.com/queue/

希望这对你来说是一个正确的方向。

【讨论】:

以上是关于使用 Jquery 一个接一个地为 Div 设置动画的主要内容,如果未能解决你的问题,请参考以下文章

随着位置的变化平滑地为 div 设置动画

MVC多个jquery.ajax一个接一个的等待

jquery如何实现点击一个按钮 div框从右→左,再点击按钮 div框从刚刚的位置移动回原来的位置?

Jquery基础

jquery怎么给一个DIV设置坐标

fadeIn 和 fadeOut 的 jquery 问题