jQuery slideUp (). remove (), здається, не відображає анімацію slideUp до того, як відбувається видалення


94

У мене є цей рядок JavaScript, і поведінка, яку я бачу, полягає в тому, що selectedLiмиттєво зникає без "ковзання вгору". Це не та поведінка, якої я очікував.

Що мені робити, щоб selectedLiковзання вгору було перед тим, як його зняти?

selectedLi.slideUp("normal").remove();

Відповіді:


197

Ви можете виправити це, поставивши виклик для видалення у аргумент зворотного дзвінка для slideUp?

напр

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

4
Зауважте, що "повільний" і "швидкий" - це єдині швидкості. Інші швидкості повинні бути або в мілісекундах , або вони будуть по замовчуванням 400. keyframesandcode.com/resources/javascript/deconstructed/jquery / ...
bendman

19

Вам потрібно бути більш чітким: замість того, щоб говорити "це" (що я погоджуюсь, має спрацювати), ви повинні робити це:

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

2
SORRY = я забув видалити свій ідентифікатор, повинен бути: $ ('# yourdiv'). SlideUp (1000, function () {$ ('# yourdiv'). Remove ();});
Блейк

12
Використання $ (this) замість $ ("# yourdiv") є більш оптимізованим, оскільки jQuery не потребує пошуку вузла.
MaximeBernard

Використання $("#yourdiv")замість $(this)- повністю зайве, і не тому цей код вирішує проблему OP. Цей код вирішує проблему, оскільки використовує completeзворотний виклик.
Гавін

8

Найпростіший спосіб - викликати функцію "remove ()" всередині slideUp як параметр, як сказали інші, як цей приклад:

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

Потрібно викликати його всередині анонімної функції (), щоб запобігти виконанню видалення () до закінчення слайда. Іншим рівним способом є використання функції jQuery "promis ()". Краще для тих, хто любить пояснювальний код, як я;)

$("#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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.