Единственный надежный способ fadeIn()
изображения, которое находится в вашей фактической разметке HTML, - это установить обработчик onload
в разметке HTML следующим образом:
<div id="image">
<img id="preload" onload="fadeIn(this)" src="http://farm8.staticflickr.com/7227/7007769551_3b5b1640ea_b.jpg" style="display:none;" />
</div>
<script>
// this function must be defined in the global scope
window.fadeIn = function(obj) {
$(obj).fadeIn(1000);
}
</script>
Рабочая демонстрация здесь: http://jsfiddle.net/jfriend00/X82zY/
Таким образом, вам не нужно присваивать каждому изображению идентификатор или класс.Просто установите стиль и обработчик событий в разметке.
Причина, по которой вы должны поместить обработчик событий в разметку, заключается в том, что если вы дождетесь запуска JavaScript вашей страницы, может быть слишком поздно.Возможно, изображение уже загружено (особенно если оно находится в кеше браузера), и, возможно, вы пропустили событие onload
.Если вы поместите обработчик в разметку HTML, вы не пропустите событие onload
, потому что обработчик назначается до начала загрузки изображения.
Если вы не хотите помещать обработчики событий в javascript,затем вы можете сделать что-то вроде этого, где вы используете заполнитель для изображения в реальном HTML, и вы используете javascript для создания фактических тегов изображения и вставки их и извлекаете URL-адрес изображения из заполнителя:
<div>
<span class="fadeIn" data-src="http://farm8.staticflickr.com/7227/7007769551_3b5b1640ea_b.jpg"></span>
</div>
<script>
$(document).ready(function() {
$(".fadeIn").each(function() {
var src = $(this).data("src");
if (src) {
var img = new Image();
img.style.display = "none";
img.onload = function() {
$(this).fadeIn(1000);
};
$(this).append(img);
img.src = src;
}
});
});
</script>
Рабочая демонстрация: http://jsfiddle.net/jfriend00/BNFqM/
Первая опция загружает ваши изображения немного быстрее (поскольку загрузка изображений начинается сразу после разбора страницы), но вторая опция дает вам более программный контроль над процессом.