jQuery исчезает, когда завершается загрузка каждого отдельного DIV с изображением?

#javascript #jquery #html

#javascript #jquery #HTML

Вопрос:

У меня есть веб-сайт, на котором отображается много картинок. Вместо того, чтобы показывать их и наблюдать за их загрузкой, есть ли способ скрыть их после завершения загрузки? Своего рода новичок в удивительном мире jQuery и javascript.

Прямо сейчас я получаю данные из PHP-файла, который вызывает сервер MySQL и получает последние изображения. Он просто возвращает большой блок HTML для отображения:

 // If the user clicks the logo
$("#logo").click(function() {
$("#right_bar_wrapper").animate({ height: 'toggle', opacity: 'toggle' }, '200');
var thePostData = "username=c";
$.ajax({
  type: "POST",
  url: "http://myflashpics.com/v2/process_newsfeed.php",
  data: thePostData,
  success: function(theRetrievedData) {
    document.getElementById('right_bar_wrapper').innerHTML = theRetrievedData;
    $("#right_bar_wrapper").fadeIn("200");

  }
});
});
  

Вот как выглядит ОДИН div, содержащий каждое изображение:

 <div class='sidebar_image_box_newsfeed'> 
<div class='sidebar_image_box_newsfeed_user_info makeProfileAppear' id='user_coultonvento'><img src='http://myflashpics.com/get_image.php?short_string=kmdpamp;size=thumbnail' />TheAmazingCoultoniusTheFourneeth...</div> 
<img src='http://myflashpics.com/get_image.php?short_string=6v9oamp;size=big' id='image_6v9o' class='makePictureBig' style='width: 180px;' /> 
<div class='sidebar_image_box_newsfeed_user_info_comments' style='float: right; margin-top: -1px; margin-left: 20px; display: none;' id='bigpicture_comment_6v9o'>9</div> 
<div class='sidebar_image_box_newsfeed_caption'>Usama bin laden? I believe that's a typo, Fox. </div> 
<div class='sidebar_image_box_newsfeed_user_info_comments' id='littlepicture_comment_6v9o'>9</div> 
<div style='clear: both;'></div> 
</div><div class='sidebar_image_box_newsfeed'> 
<div class='sidebar_image_box_newsfeed_user_info makeProfileAppear' id='user_BrandonVento'><img src='http://myflashpics.com/get_image.php?short_string=e4r7amp;size=thumbnail' />Brandon Vento</div> 
<img src='http://myflashpics.com/get_image.php?short_string=o1skamp;size=big' id='image_o1sk' class='makePictureBig' style='width: 180px;' /> 
<div class='sidebar_image_box_newsfeed_user_info_comments' style='float: right; margin-top: -1px; margin-left: 20px; display: none;' id='bigpicture_comment_o1sk'>9</div> 
<div class='sidebar_image_box_newsfeed_caption'></div> 
<div class='sidebar_image_box_newsfeed_user_info_comments' id='littlepicture_comment_o1sk'>9</div> 
<div style='clear: both;'></div> 
</div>
  

Конечно, он исчезает, но пользователь видит, как он загружается.

Каким был бы наилучший способ сделать это?

Спасибо,
Коултон

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

1. Что вы имеете в виду, когда смотрите, как он загружается?

2. @Nick: Следите за загрузкой изображения. В Google Chrome вы видите верхнюю часть изображения, и вы постепенно начинаете видеть остальную часть изображения. Как насчет того, чтобы скрыть его до тех пор, пока он не загрузится и не исчезнет?

Ответ №1:

для этого вы можете использовать функцию jquery image .load() image .load()

 $.ajax({
  type: "POST",
  url: "http://myflashpics.com/v2/process_newsfeed.php",
  data: thePostData,
  success: function(theRetrievedData) {
    document.getElementById('right_bar_wrapper').innerHTML = theRetrievedData;
    $("#right_bar_wrapper").fadeIn("200");
    //here do some trick
    $("#right_bar_wrapper img").load(function(){ 
        $(this).fadeIn();
    });
  }
});
  

или вы можете использовать live () для привязки динамических элементов img

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

1. ах да 🙂 спасибо за комментарий, очень хороший. Коултон, ты ведь понимаешь, верно? что говорит Андре.

Ответ №2:

Загрузите теги img с помощью style=’display: none’ и привяжите событие load () для изображения, чтобы оно исчезло. Документация: http://api.jquery.com/load-event /

Пример:

 $(".makePictureBig").live('load', function(){ 
    $(this).fadeIn();
});
  

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

1. Как бы я это сделал, если у меня есть несколько изображений? Я хочу, чтобы каждый из них исчезал по отдельности, а не все одновременно, если это имеет смысл.

2. load () будет вызываться индивидуально после загрузки каждого изображения

3. Он не вызывается при загрузке изображения. Вставил alert(); , и он так и не появился. В чем может быть возможная проблема? Существует ли конкретная библиотека?

Ответ №3:

О .. используйте load()

Вы можете выполнить функцию, когда загрузка изображения завершится (отобразить содержащий div).

Взгляните на этот пример http://www.stoimen.com/blog/2009/08/05/jquery-check-whether-image-is-loaded /

Ответ №4:

Во-первых, используйте .load() вместо ajax, так как это проще в использовании

Затем, в качестве обратного вызова функции load(), привяжите fadeIn() к событию загрузки

 $("#logo").click(function() {
  $("#right_bar_wrapper")
    .animate({ height: 'toggle', opacity: 'toggle' }, '200')
    .load( "http://myflashpics.com/v2/process_newsfeed.php",
           {"username" : "c"},
           function() {
               $(this).bind('load',function(){
                  $(this).fadeIn("200");
               });
           }
  );
});
  

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

1. Хм .. Не сработало. Ни один из моих JS не работает.. Может быть, проблема в синтаксисе?

2. В нем было дополнительное }, которое я уже исправил. Попробуйте сейчас, если не сработает, пожалуйста, укажите скрипку

3. Опять же, это была опечатка. Я забыл закрыть функцию привязки. Рад, что вы уже решили эту проблему.