добрый вечер.removeChild after setimeout - работает спорадически?
У меня есть загрузчик, который накладывается на сайт, исчезает через переход css (непрозрачность), который длится 1000 мс, когда класс тела изменен на «загружен», а затем, как только переход закончен, я удаляю его из DOM.
Я использую следующий скрипт, который отлично работает во всем баре osx snow leopard/google chrome v28, и даже тогда только для нескольких людей - у меня точно такая же настройка, как и у моего клиента и почти всех я могу пройти тест - и он отлично работает.
НО У меня было 2 или 3 сообщения об ошибках, когда загрузчик не удаляется из DOM, поэтому он все еще накладывает остальную часть содержимого и делает элементы под ним неактивными. один вид пользователя даже отправил мне видео, которое подтверждает, что элемент загрузчика все еще находится в DOM.
сценарий выглядит следующим образом; Я задаюсь вопросом, может ли быть проблема с тем, как я удалил элемент, или с помощью синтаксиса функции setTimeout.
любая помощь относительно того, почему это может быть неудачно, будет оценено, особенно учитывая, что я неспособен повторить это! Я добавил комментарии в сценарий, чтобы объяснить, как я ожидаю, что он будет работать (и как это делается в большинстве случаев).
var
loaded = false,
_body = document.body,
loader = document.getElementById("loader"),
kill_loader = function() {
if (loader) {
loader.parentNode.removeChild(loader);
}
},
cl = function() {
// set loaded to true, add class to body that fades the loader, then remove the loader
loaded = true;
_body.className = _body.className + " loaded";
// the above works as intended
setTimeout(kill_loader,1000);
// this last bit does not seem to work in rare instances as detailed.
// the timeout is so that the loader fully fades before being removed.
};
window.onload = function() {
if (!loaded) {
// if loaded variable is false (i.e. cl() has not run), call the function to complete loading
cl();
}
};
setTimeout(function() {
// if page still not loaded after 5 seconds, force the load
if(!loaded) {
cl();
}
},5000);
заблаговременно за любую помощь, которую вы можете дать.
Если вы не можете воспроизвести его, можете ли вы попросить своих пользователей сообщать о любых ошибках консоли? Являются ли ваши переменные глобальными? –
... это не имеет прямого отношения к делу, но в качестве формы я бы переместил вашу 'if (!груженную) {' в функцию 'cl()', чтобы вам не пришлось ее повторять. Затем вы можете сделать 'window.onload = cl' и' setTimeout (cl, 5000) ' –
Является ли этот код готовой функцией? Мне интересно, может быть, проблема в том, что «загрузчик» имеет значение null, когда вы вызываете эту функцию, потому что в каком-то странном случае html еще не был обработан. Где этот скрипт на странице? Это после html? –