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();
});

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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.