#jquery #jquery-ui #delay
#jquery #jquery-ui #задержка
Вопрос:
Я бы хотел, чтобы div исчез, а затем был удален:
$('#div').delay(1000).fadeOut(300);
$('#div').delay(1300).remove();
К сожалению, это просто удаляет div напрямую, без задержек. Почему я не могу отложить действие удаления? Какие существуют решения?
Спасибо
Комментарии:
1. Почти уверен
delay
, что работает только для анимации.2. задержка предназначена для использования с эффектами анимации, а не с методами манипулирования jQuery DOM
3.
$('#div').delay(1000).fadeOut(300, function(){$(this).remove();});
?4. У @Rocket есть ответ. и, вероятно, следует опубликовать его комментарий, поскольку это правильный ответ для данной ситуации.
Ответ №1:
Если вы хотите, чтобы элемент был удален после того, как он исчезнет, вы можете fadeOut
использовать параметр обратного вызова.
$('#div').delay(1000).fadeOut(300, function(){
$(this).remove();
});
Ответ №2:
.delay()
работает только с методами, которые проходят через очередь анимации. Таким образом, это работает для .fadeOut()
(анимации), но не .remove()
(не анимации).
Чтобы показать вам, насколько это специализировано, это не задерживает:
$('#div').delay(1000).hide();
Но это делает:
$('#div').delay(1000).hide(1);
Указание длительности для метода hide превращает его в анимацию, которая затем использует очередь анимации, с которой затем работает .delay()
.
Чтобы удалить элемент с задержкой, вы можете использовать setTimeout()
вызов:
setTimeout(function() {
$('#div').remove();
}, 1300);
или немного усложнить и использовать функцию завершения для анимации, подобной этой:
$('#div').delay(1000).hide(1, function() {
$(this).remove();
});
Комментарии:
1.
hide
все еще сохраняет элемент в DOM, тогда какremove
этого не делает.2. хм, спасибо за ваш ответ. Существуют ли методы задержки, которые работают с действиями без анимации?
3. @jay: Есть хороший вариант
setTimeout
, но кроме этого, не совсем. Это работает для анимаций, потому что они находятся в очереди (и, вероятно, используетсяsetTimeout
в любом случае).4. Насколько я знаю, в jQuery нет функций задержки, которые работают с операциями вне очереди. Для этого вы просто используете setTimeout(). Я добавил к своему ответу способ использования функции завершения анимации для выполнения удаления. Это позволяет использовать
.delay()
.5. @Rocket — прочитайте остальную часть моего ответа, чтобы понять, почему я использовал .hide() в качестве примера. Я просто объясняю, как. delay() работает или не работает. Затем я показываю пару примеров, которые действительно удаляют элемент.
Ответ №3:
Вы можете попробовать что-то вроде этого.
$('#div').delay(1000).fadeOut(300,function(){
setTimeout(function(){
$('#div').remove()
} ,1300);
});
Я думаю, что это работает так, как должно. Надеюсь, это поможет
Комментарии:
1. Не передавайте строку в
setTimeout
, передайте вместо этого функцию.2. Я думаю, что OP хочет, чтобы элемент был удален сразу после
fadeOut
завершения.