Скрыть div при загрузке содержимого другого div

#javascript #jquery

#javascript #jquery

Вопрос:

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

 <div id="prepage" style="position:absolute; left:0px; top:0px; background-color:white; height:100%; width:100%; z-index:1">
  <div align="center">
    <p>loading... please wait</p>
  </div>
</div>
  

Я пытаюсь скрыть приведенный выше div при загрузке изображений в div id =»graphic». Я думал, что что-то подобное может сработать:

 $(window).load(function() {
  $("#prepage").hide();
});
  

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

обновление кажется, я должен был включить содержимое div изображения:

 <div align="center" id="graphic">
  <div style="position:relative; left:0px; top:0px; width:251px; height:350px">
	<div style="position:absolute; left:0px; top:0px; width:251px; height:8px;">
		<img src="foo.gif" width="251" height="8" alt="">
	</div>
	<div style="position:absolute; left:0px; top:3px; width:96px; height:12px;">
		<img src="bar.gif" width="96" height="12" alt="">
	</div>  

^ и так далее. В div есть 25 фрагментов gif, которые составляют все изображение целиком.

Комментарии:

1. Не так много, что можно сделать, когда мы ничего не знаем об div id="graphic" элементе

2. Извините, там было много html-кода, который, по моему мнению, не соответствовал моему описанию. Внесет изменения в вопрос.

3. Замените содержимое загружаемого div кодом загруженных изображений.

4. так bar.gif и foo.gif являются ли загрузчики?

5. foo.gif и bar.gif это всего лишь 2 из 25 фрагментов изображения, которые собраны в большую таблицу css. Я использую фрагменты, потому что изображение большего размера имеет откаты, которые заменяют изображения внутри него.

Ответ №1:

Изначально скройте div и прикрепите событие onload к изображениям.

Создайте атрибут данных, который увеличивается для каждого загруженного изображения, затем покажите div, когда он будет равен общему количеству изображений:

 $('#graphic img').on('load', function() {
  let loaded = ($('#graphic').data('loaded')   1) || 1;
  $('#graphic').data('loaded', loaded);
  if (loaded == $('#graphic img').length) {
    $('#graphic').show();
  }
});
  

 $('#graphic img').on('load', function() {
  let loaded = ($('#graphic').data('loaded')   1) || 1;
  $('#graphic').data('loaded', loaded);
  if (loaded == $('#graphic img').length) {
    $('#graphic').show();
  }
});  
 #graphic {
  display: none;
}  
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div align="center" id="graphic">
  <img src="https://picsum.photos/50/50?random">
  <img src="https://picsum.photos/50/51?random">
  <img src="https://picsum.photos/50/52?random">
  <img src="https://picsum.photos/50/53?random">
  <img src="https://picsum.photos/50/54?random">
  <img src="https://picsum.photos/50/55?random">
  <img src="https://picsum.photos/50/56?random">
  <img src="https://picsum.photos/50/57?random">
  <img src="https://picsum.photos/50/58?random">
  <img src="https://picsum.photos/50/59?random">
  <img src="https://picsum.photos/50/60?random">
  <img src="https://picsum.photos/50/61?random">
  <img src="https://picsum.photos/50/62?random">
  <img src="https://picsum.photos/50/63?random">
  <img src="https://picsum.photos/50/64?random">
  <img src="https://picsum.photos/50/65?random">
  <img src="https://picsum.photos/50/66?random">
  <img src="https://picsum.photos/50/67?random">
  <img src="https://picsum.photos/50/68?random">
  <img src="https://picsum.photos/50/69?random">
</div>  

Комментарии:

1. Спасибо за это. Я мог бы заставить ваш код работать, но когда я начал добавлять свой, я потерял функциональность. Однако, что я узнал в процессе, так это то, что мой скрипт был размещен не в том месте. В конце концов, я заставил это работать, просто используя мой оригинальный код jquery, но поместив его в конец html.