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

#cover{opacity:0}

В начале страницы и

$(window).load(function() {
  $('#cover').css('opacity','1');
});

В конце, непосредственно перед тегом </body>. Он отлично работает, когда страница загружается в первый раз.

ПРОБЛЕМА: если я снова загружу ту же страницу, она покажет все изображения и текст, разбросанные по странице. После полной загрузки работает нормально. конечно, такое поведение вызвано кэшированными изображениями. но все изображения находятся внутри основного контейнера, в котором есть opacity:0, это меня полностью смутило.

ОБНОВЛЕНИЕ 1:

Я использую turn.js для преобразования всего контейнера в книгу, я хочу, чтобы книга стала видимой, когда книга будет готова, т.е. завершена загрузка изображений и инициализация javascript.

ОБНОВЛЕНИЕ 2:

Вот как я проверяю «изображения загружены» и «инициализированы javascript». он работал так, как я хотел. это хороший способ справиться с ситуацией?

$(window).load(function(){
  $(window).ready(function() {
     $('#cover').css('opacity','1');
  });
});

$(window).ready(function(){
  $(window).load(function() {
     $('#cover').css('opacity','1');
  });
});
0
Prakhar Thakur 28 Янв 2015 в 11:14
В чем проблема? когда изображения кэшируются, они загружаются немедленно. каково желаемое поведение?
 – 
Alex
28 Янв 2015 в 12:08
Изображения не должны отображаться, пока они не будут расположены с javascript, так как это выглядит некрасиво.
 – 
Prakhar Thakur
28 Янв 2015 в 12:11
Затем позвоните $('#cover').css('opacity','1'); после этого?!
 – 
Alex
28 Янв 2015 в 12:13
Как я могу быть уверен, что загрузка изображений и инициализация javascript завершены.
 – 
Prakhar Thakur
28 Янв 2015 в 12:17
Вам следует обновить свой вопрос, потому что теперь вы описываете другую проблему (посмотрите на проблему xy). опубликуйте свою функцию javascript (или то, как вы ее инициализируете), и тогда мы сможем помочь
 – 
Alex
28 Янв 2015 в 12:20

2 ответа

Проблема может быть связана с вашим $('window').onload();

Потратьте некоторое время и прочитайте этот пост SO.

какая-есть-разница-между-загрузкой-окна-и-готовностью-документа

load вызывается, когда все активы загружаются, включая изображения. ready срабатывает, когда DOM готов к взаимодействию.

Из MDC, window.onload:

Событие загрузки запускается в конце процесса загрузки документа. На этом этапе все объекты в документе находятся в модели DOM, а все изображения и субкадры завершили загрузку.

Из документации API jQuery, .ready(handler):

Хотя JavaScript предоставляет событие загрузки для выполнения кода при визуализации страницы, это событие не запускается, пока все ресурсы, такие как изображения, не будут полностью получены. В большинстве случаев скрипт можно запустить, как только иерархия DOM будет полностью построена. Обработчик, переданный в .ready (), гарантированно будет выполнен после того, как DOM будет готов, поэтому обычно это лучшее место для подключения всех других обработчиков событий и запуска другого кода jQuery. При использовании скриптов, которые полагаются на значение свойств стиля CSS, важно ссылаться на внешние таблицы стилей или встраивать элементы стиля, прежде чем ссылаться на скрипты.

Дайте мне знать, если это изменение работает.

1
Community 23 Май 2017 в 14:57

Вы не вызываете один и тот же блок в своем CSS (#container) и в своем JS (#cover).

0
KyleK 28 Янв 2015 в 11:25
Извините, это была глупая ошибка, я отредактировал свой вопрос.
 – 
Prakhar Thakur
28 Янв 2015 в 11:31