多个元素上的排队动画

发布于 2024-10-15 19:15:03 字数 491 浏览 8 评论 0原文

我试图找出如何使用 jQuery 对多个元素上的动画进行排队。

例如,我需要在屏幕上移动元素。然后,完成后,移动下一个,依此类推。

这可能是一个项目列表.. 一个接一个地就位。

有人可以帮我吗?

我是否需要使用每个动画的 onComplete 函数来启动下一个动画?

更新:简单的例子。

<ul><li>Item 1</li><li>Item 2</li><li>Item 3</li><li>Item 4</li></ul>

我想让它们一一淡出。 SO 项目 1 淡入。完成后,项目 2 淡入,依此类推。

我正在使用 jQuery 将一些 Flash“页面构建”类型动画转换为 HTML。所以我需要对多个元素上的动画进行排队。就像出现一个框,然后将一些文本滑到上面......等等。

I'm trying to find out how to queue animations on multiple elements using jQuery.

For example, I need to move on element across the screen. Then when that is done, move the next one, etc.

This of perhaps a list of items.. that fall into place.. one by one.

Can somebody help me out?

Do I need to resort to using the onComplete functions of each animation to start the next one?

Update: simple example.

<ul><li>Item 1</li><li>Item 2</li><li>Item 3</li><li>Item 4</li></ul>

I want to make each of them fade in one by one. SO Item 1 fades in. Then when that is done, Item 2 fades in and so forth.

I'm converting some Flash "page build" type animations to HTML using jQuery. So I need to queue animations on multiple elements. Like make a box appear, and the slide some text onto it.. etc..

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

骑趴 2024-10-22 19:15:03

如果您知道其他元素的效果持续时间,您可以为每个元素添加延迟。

假设你想一个接一个地淡出一些div,并且每个淡出需要800ms,那么,你可以立即开始第一个,第二个延迟800ms(所以当另一个结束时开始),第三个一个延迟 1600 毫秒等等...

您可以使用 firebug 或 webkit 控制台执行的一个自动化示例(喜欢您的示例想法 jAndy!=D)是:(

$('div.nav li').each(function(i, elem) {
    $(elem).delay(i * 800).fadeOut(800);
});

在导航链接中执行它:问题,标签,用户...)

if you know the duration of the effects on the other elements you can add a delay for every element.

Say you want to fade out some divs one after the other, and each fade takes 800ms, then, you can start the first one right away, the second one with a delay of 800ms (so it starts when the other ends), the third one a delay of 1600ms and so on...

An automated example for this that you can execute with firebug or webkit console (liked your example idea jAndy! =D) is:

$('div.nav li').each(function(i, elem) {
    $(elem).delay(i * 800).fadeOut(800);
});

(execute it watching at the navigation links: Question, Tags, Users...)

独享拥抱 2024-10-22 19:15:03

Paul Irish 就此主题写了一篇很棒的文章:

http: //paulirish.com/2008/sequentially-chain-your-callbacks-in-jquery-two-ways/

对于您的淡入示例,您可以执行以下操作:

(function showNext(jq){
jq.eq(0).fadeIn("fast", function(){
    (jq=jq.slice(1)).length && showNext(jq);
});
})($('ul > li'))

根据口味进行调整。

Paul Irish wrote a great article on this topic:

http://paulirish.com/2008/sequentially-chain-your-callbacks-in-jquery-two-ways/

For your fade-in example, you could do:

(function showNext(jq){
jq.eq(0).fadeIn("fast", function(){
    (jq=jq.slice(1)).length && showNext(jq);
});
})($('ul > li'))

Adjust to taste.

放肆 2024-10-22 19:15:03

实际上,所有 jQuery 的 fx 方法(包括 .animate())都提供了完整的回调。也就是说,当您需要在动画完成后执行一些非特效内容时。

如果您只是想让不同的 fx 效果按顺序执行,那么链接这些方法就足够了,就像

$('object').fadeOut(3000).slideDown(2500).slideUp(1500);

jQuery 会在这个地方自动照顾您一样。 的调用。

$('object').fadeOut(3000, function() {
    // do something here
    $(this).slideDown(2500, function() {
        // do something here
        $(this).slideUp(1500, function() {
           // do something here
        });
    });
});

这会被翻译成类似update

参考您的评论,将其输入到您的 firebug 或 webkit 控制台中:

 $('div').slice(4, 9).fadeOut(3333).fadeIn(5555).slideUp(2000).slideDown(1000);

这适用于 Stackoverflow 端的一些上部 div 元素。

Actually all of jQuerys fx methods (including .animate()) offer a complete callback. That is when you need to execute some non-fx stuff after an animation has completed.

If you just want to have different fx effects executing in order, it's enough to chain the methods like

$('object').fadeOut(3000).slideDown(2500).slideUp(1500);

jQuery will automatically take care of you in this spot. This is translated into a call like

$('object').fadeOut(3000, function() {
    // do something here
    $(this).slideDown(2500, function() {
        // do something here
        $(this).slideUp(1500, function() {
           // do something here
        });
    });
});

update

In reference to your comment, enter this into your firebug or webkit console:

 $('div').slice(4, 9).fadeOut(3333).fadeIn(5555).slideUp(2000).slideDown(1000);

This would work on some upper div elements from the Stackoverflow side.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文