jQuery slideUp (). remove (), похоже, не показывает анимацию slideUp до того, как произойдет удаление

94

У меня есть эта строка JavaScript, и поведение, которое я наблюдаю, заключается в том, что она selectedLiмгновенно исчезает, не «скользя вверх». Это не то поведение, которого я ожидал.

Что мне делать, чтобы selectedLiскользить вверх, прежде чем снимать?

selectedLi.slideUp("normal").remove();
Эрик Шуновер
источник

Ответы:

198

Можно ли исправить это, поместив вызов remove в аргумент обратного вызова для slideUp?

например

selectedLi.slideUp("normal", function() { $(this).remove(); } );
Шонб
источник
4
Обратите внимание, что "медленная" и "быстрая" - единственные скорости. Другие скорости должны быть либо в миллисекундах, либо по умолчанию они будут
равны
19

Вы должны быть более точными: вместо того, чтобы говорить «это» (которое, я согласен, должно работать), вам следует сделать следующее:

$("#yourdiv").slideUp(1000, function() {
    $(this).remove();
});
Блейк
источник
2
ИЗВИНИТЕ = я забыл удалить свой идентификатор, должно быть: $ ('# yourdiv'). SlideUp (1000, function () {$ ('# yourdiv'). Remove ();});
Blake
12
Использование $ (this) вместо $ ("# yourdiv") более оптимизировано, поскольку jQuery не нужно искать узел.
MaximeBernard
Использование $("#yourdiv")вместо $(this)полностью излишне, и не поэтому этот код решает проблему OP. Этот код устраняет проблему, поскольку использует completeобратный вызов.
Гэвин
8

Самый простой способ - вызвать функцию «remove ()» внутри slideUp в качестве параметра, как говорили другие, как этот пример:

$("#yourdiv").slideUp("normal", function() {
    $(this).remove();
});

Его необходимо вызывать внутри анонимной функции (), чтобы предотвратить выполнение remove () до завершения slideUp. Другой равноправный способ - использовать функцию jQuery «обещание ()». Лучше для тех, кто любит понятный код, как я;)

$("#yourdiv").slideUp("normal").promise().done(function() {
    $(this).remove();
});
xaviqv
источник
3

Используя обещания, вы также можете дождаться завершения нескольких анимаций, например:

selectedLi.slideUp({duration: 5000, queue: false})
.fadeOut({duration: 3000, queue: false})
.promise().done(function() {
    selectedLi.remove()
})
знаменитый
источник
-2
selectedLi.slideUp(200, this.remove);

источник
1
Я тестировал - не удаляет элемент после скольжения вверх.
Константин Спирин
Эффективно скрывает элемент, но не удаляет его из DOM.
andreszs 03