2014-02-14 4 views
1

У меня есть функция перехода, которая имеет экран наложения, который говорит «загрузка»removeClass не показывая

SM.prototype.changeScene = function(sceneName){ 
    $("#Loading").removeClass("hide"); 
    $("#loading_curtain").removeClass("offscreen"); 
    $("#acrcurtain").removeClass("offscreen"); 
    $(".loading_text").removeClass("offscreen"); 

    var changeMe = function(){ 
     //lots of loading code (2-5 seconds) 
    }; 

    window.setTimeout(changeMe, 100); 
} 

Это прекрасно работает с SetTimeout установить по меньшей мере 100. Если он удален или гораздо меньше экран загрузки ISN Не отображается. Классы удаляются должным образом, но они не отображаются на экране. Есть ли причина, по которой это помогает?

+0

Вы только что назовете changeme & removeClass вне его – Jain

+0

какая у вас зависимость в вашей функции changeMe? возможно, вы пытаетесь изменить не созданный элемент или сделать что-то в случае, если элемент скрыт, и он в настоящее время работает в анимации. –

ответ

0

JavaScript, работающий в браузере, не перерисовывает элементы на экране сразу по мере их изменения. Он обычно ждет, пока не будет запущен JavaScript-код.

Именно поэтому тайм-аут позволяет ему перерисовывать и почему он не перерисовывается сразу без него.

С истечением времени текущий бит исполняемого JavaScript заканчивается, а затем браузер получает возможность перерисовывать до запуска «большого количества кода загрузки».

Без тайм-аута код JavaScript по-прежнему активно работает, поэтому браузер ждет, пока он не закончит работу.

+0

Как вы объясните, что он не работает ни при меньших таймаутах (согласно OP)? –

+0

@FelixKling - Хорошая мысль! Это то, что я не могу объяснить. Всякий раз, когда я это делал, даже очень короткий тайм-аут 1 мс был достаточным для перерисовки. Я не уверен, что происходит здесь, когда более короткие таймауты не работают. Нужно было бы увидеть больше кода или увидеть его в действии, чтобы не догадаться. –

+0

На самом деле, если я удаляю все, кроме одной из операций .removeClass(), он работает с меньшим значением, поэтому возможно, что операции не будут завершены за короткое время? – brickfungus

Смежные вопросы