需要使用jQuery使DOM元素逐渐淡出,显然我需要循环,因为我有20个元素,我不知道如何在jQuery中创建循环我确实如下。jQuery等待第一个动画在开始下一个动画之前完成
但是,回调不能正常工作,所有元素同时淡入,它应该等待第一个动画完成,然后再次运行animate_element()。
如果有更好的方法来做到这一点,我想知道它,但我也想知道为什么下面的代码不起作用?
$('div').css("display", "none");
$('div').addClass("needs_animation");
function animate_element(){
if ($("div[class='needs_animation']:first").length) {
$("div[class='needs_animation']:first").removeClass("needs_animation");
$("div[class='needs_animation']:first").fadeIn(2000, animate_element());
}
}
animate_element();
例子:http://jsfiddle.net/m7PWT/1/
编辑:固定感谢约翰■回应,但我用我自己的代码,即使它的性能不是最好的,因为在这一点上它更清楚我。
$('div').css("opacity", "0");
$('div').addClass("needs_animation");
function animate_element(){
if ($("div[class='needs_animation']").length) {
$("div[class='needs_animation']:first").animate({opacity:1}, 100, function() {
$("div[class='needs_animation']:first").removeClass("needs_animation");
animate_element()
});
}
}
animate_element();
工作拨弄
谢谢,你能解释为什么我的代码不工作? – user3185872
@ user3185872 - 这是一个很好的问题。起初,我没有仔细查看你的代码,但我一直想念它。我马上看到一个问题。你重复'$(“div [class ='needs_animation']:first”)',而不是将它存储在一个变量中。这不仅仅是一个性能问题;删除课程后它会有不同的结果。但只是做出这样的改变仍然无法奏效。 –
感谢,我的第一天与jQuery,但我来自PHP背景。 – user3185872