【问题标题】:Paragraphs not appearing in order using fadeIn()使用fadeIn() 没有按顺序出现的段落
【发布时间】:2020-09-25 17:00:18
【问题描述】:

我希望名称按顺序淡入。它目前在动画方面看起来很糟糕。我希望名字出现然后倒下,第二个取代它,然后第二个倒下等等

var friends = ["John", "Max", "Jeena", "Suki"];
for (var i = 0; i < friends.length; i++) {
  $("body").append("<p>" + friends[i] + "</p>");
  $("p").hide().fadeIn(1000 * (i + 2));
}
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"&gt;&lt;/script&gt;

【问题讨论】:

    标签: javascript jquery animation append paragraph


    【解决方案1】:

    问题是因为您在每次迭代中对所有现有元素再次调用hide()fadeIn

    要使这项工作如您所愿,您只需将这些方法调用应用到您在循环逻辑中创建的 current p 元素。

    在下面的示例中,请注意默认情况下使用 CSS 隐藏 p 而不是 jQuery 的 hide() 方法。这是为了避免任何可能的 FOUC。

    ["John", "Max", "Jeena", "Suki"].forEach((name, i) => {
      $(`<p>${name}</p>`).appendTo('body').fadeIn(1000 * (i + 2));
    });
    p { display: none; }
    &lt;script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"&gt;&lt;/script&gt;

    更新

    我可以做到直到第一个名字的动画完成之前其他的不开始出现吗?

    当然,您可以使用delay() 让每个动画等待预定的时间,让前面的动画完成:

    ["John", "Max", "Jeena", "Suki"].forEach((name, i) => {
      $(`<p>${name}</p>`).appendTo('body').delay(1000 * i).fadeIn(500);
    });
    p { display: none; }
    &lt;script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"&gt;&lt;/script&gt;

    【讨论】:

    • 我可以这样直到第一个名字的动画完成其他的不开始出现吗?
    • 是的,使用delay()。我更新了答案,向您展示如何做到这一点
    猜你喜欢
    • 1970-01-01
    • 2020-03-11
    • 2021-12-01
    • 2021-11-11
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多