#jquery #delay
#jquery #задержка
Вопрос:
У меня есть следующий код jquery:
$j('#' messageId).fadeTo(1000, .3).delay(3000).css("top", 20);
Я ожидаю, что при выполнении этого произойдет следующее:
- идентификатор сообщения div исчезает в течение одной секунды, вплоть до
.3
непрозрачности - В течение 3 секунд ничего не происходит
- Идентификатор сообщения div перемещается на 20 пикселей сверху
Вместо этого задержки нет. Выполняются только шаги 1 и 3, описанные выше, в обратном порядке или другими словами:
- Идентификатор сообщения
div
немедленно перемещается - После перемещения сообщение исчезает в течение одной секунды
Примечание: что я действительно хочу сделать для последнего шага, так это remove()
вызов, чтобы извлечь элемент из DOM, но это также, казалось, «сработало» слишком рано, поэтому я подумал, что попробую установить эту позицию css.
Задерживает ли задержка только последующие эффекты, а не последующую настройку css или remove()
вызов? Должен ли я использовать функцию javascript setTimeout()
для достижения своей цели?
Комментарии:
1. Возможно, этот код в jquery. страница delay() ( api.jquery.com/delay ) предлагает подсказку на решение: $(‘.foo’). slideUp(300).delay(300).queue(функция() { $(this).remove(); });
Ответ №1:
Используйте очередь для нестандартных эффектов.
$j('#' messageId).fadeTo(1000, .3).delay(3000).queue(function(){
$(this).css("top", 20);
});
Вот скрипка.
Ответ №2:
Я считаю, что delay()
функция работает только в очереди анимации jQuery. Функция css не является частью очереди анимации. Вы должны выполнить обратный вызов с таймаутом. Например:
$j('#' messageId).fadeTo(1000, .3, function() {
setTimeout(function() {
$('#' messageId).css("top", 20);
}, 3000);
}