Другой ответ на вызов hide в обратном вызове - это правильный подход, но я решил ответить на вопрос, почему.
Здесь действительно много вопросов. Ваше намерение состоит в том, чтобы показать #loading
, затем slideup
и, как только это будет завершено, скрыть #loading
. Однако, когда вызывается slideup
, анимация ставится в очередь и ваш код перемещается, код не ждет завершения slideup
, а затем переходит к следующей строке. Вот почему вам нужно использовать обратный вызов для вызова hide
после завершения slideup
.
Еще одна вещь, которую многие упускают из виду, это то, что show
и hide
при вызове с продолжительностью являются анимациями и, следовательно, являются очередью, однако, при отсутствии продолжительности эти вызовы НЕ являются анимациями и НЕ ставятся в очередь . Таким образом, вызов show
с продолжительностью, а затем немедленный вызов hide
без продолжительности никогда не покажет элемент. Посмотрите это для иллюстрации этого: http://jsfiddle.net/zZHhm/ обратите внимание, что вы никогда не видите DIV2.
Кроме того, длительности, передаваемые в show
и hide
, указаны в миллисекундах, поэтому hide(1)
дает продолжительность в 1 миллисекунду (вы можете знать об этом).