Необходимо, чтобы элементы DOM замирали один за другим с помощью jQuery, очевидно, мне нужен цикл, поскольку у меня есть 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/
EDIT: Фиксированные благодаря ответ John S, однако я использовал свой собственный код, даже если его производительность не лучше, так как его более ясным для меня на данный момент.
$('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