Я удивлен, что не могу найти ясного ответа на этот вопрос. Итак, в jQuery вы можете сделать это:
$(someElements).fadeOut(1000);
$(someElements).remove();
Что, запустит анимацию fadeOut, но до того, как она закончит выполнение в течение 1 секунды, элементы будут удалены из DOM. Но как это возможно? Я продолжаю читать JavaScript, однопоточное (см. Также: Является ли JavaScript гарантированным однопоточным?). Я знаю, что могу сделать:
$(someElements).fadeOut(1000).promise().done(function() {
$(someElements).remove();
});
или даже лучше:
$(someElements).fadeOut(1000, function() {
$(this).remove();
});
Я не понимаю, как работает JavaScript в одном потоке, но я могу использовать эти функции jQuery, которые выполняют асинхронно и заметно видят изменения DOM в разных местах одновременно. Как это работает? Этот вопрос не задан: "Как это исправить".