jQuery:链接动画是一个问题,改进我的代码

Posted

技术标签:

【中文标题】jQuery:链接动画是一个问题,改进我的代码【英文标题】:jQuery: Chained Animations Are An Issue, Improving My Code 【发布时间】:2012-08-01 00:27:06 【问题描述】:
$(".info-graphic-data-box").fadeOut(200);
$(".info-graphic-content").fadeOut(200);
$("#" + currentContentId).parent().fadeIn(500);
$("#" + currentContentId).fadeIn(500);

因此,在这种情况下,我必须淡出两个元素,然后淡入不同的两个元素。

这里的问题是动画是链式的……这意味着,如果你一个接一个地滚动多个元素,动画就会继续进行下去。

帮助?

【问题讨论】:

【参考方案1】:

动画只有在应用于相同元素时才被链接

要在添加新动画之前停止任何正在进行的动画,请使用.stop() 方法。

【讨论】:

是的,但我不想stop 动画就在中间......而是阻止它不断发生。几乎就像跳到队列的末尾。 @dcolumbus 您将需要提供您的标记,最好是一个演示“不良”行为的 jsfiddle。 @dcolumbus 你不会“停止”动画并让元素保持原样,你会“停止”动画然后排队替换它,所以它在那之后完成。跨度> 【参考方案2】:

1- 首先,创建对 DOM 对象的引用:

var $idgb = $(".info-graphic-data-box"),
    $igc = $(".info-graphic-content"),
    $cc = $("#" + currentContentId);

2- 使用回调和链接来确保正确的动画执行:

$idgb.fadeOut(200, function()
    $igc.fadeOut(200, function()
        $cc.parent().fadeIn(500).end().fadeIn(500);
    );
);

3- 每当您认为可能与执行重叠时,使用 stop() 方法取消任何当前正在运行的动画:

$cc.stop().parent().stop().fadeIn(500, function() $cc.fadeIn(500); );

以上是伪代码...不确定您希望动画如何真正在页面上工作(基于用户输入)。

【讨论】:

缓存 DOM 元素只使用一次什么都不做,否则我倾向于同意。 它更干净,更易于维护。只是一个好习惯......但是,如果只使用一次,就像你说的那样,绝对没有必要。【参考方案3】:

如果它按原样为你工作,除了动画没有停止,我猜问题不是动画的顺序,你需要的只是stop()

$(".info-graphic-data-box, .info-graphic-content").stop(true, false).fadeOut(200);
$("#" + currentContentId).fadeIn(500).parent().stop(true, false).fadeIn(500);

还稍微合并了这些选择器。

【讨论】:

以上是关于jQuery:链接动画是一个问题,改进我的代码的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 jQuery 在菜单之间切换?

动画淡化链接的代码[关闭]

寻找改进我的 javascript (jquery) 代码的想法。递归函数

如何在jQuery中动画滚动到div?

jquery并行动画

使用 jQuery 自动为所有悬停状态设置动画