问题是因为您在每次迭代中都在调用hide()
所有fadeIn
现有元素。
要使这项工作如您所愿,您只需将这些方法调用应用于您在循环逻辑中创建的当前元素。 p
在下面的示例中,请注意p
默认情况下使用 CSS 来隐藏而不是 jQuery 的hide()
方法。这是为了避免任何可能的 FOUC。
["John", "Max", "Jeena", "Suki"].forEach((name, i) => {
$(`<p>${name}</p>`).appendTo('body').fadeIn(1000 * (i + 2));
});
p { display: none; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
更新
我可以做到这一点,直到第一个名字的动画完成其他的不开始出现吗?
当然,您可以使用delay()
让每个动画等待预定的时间以让之前的动画完成:
["John", "Max", "Jeena", "Suki"].forEach((name, i) => {
$(`<p>${name}</p>`).appendTo('body').delay(1000 * i).fadeIn(500);
});
p { display: none; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>