#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. Опять же, это была опечатка. Я забыл закрыть функцию привязки. Рад, что вы уже решили эту проблему.