Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Асинхронная загрузка изображения (https://javascript.ru/forum/jquery/2041-asinkhronnaya-zagruzka-izobrazheniya.html)

Octane 25.10.2008 23:15

Цитата:

Сообщение от Kolyaj (Сообщение 7539)
Да, честно говоря, все работает.

Если изображение не добавляется в документ, то Opera не загружает его и onload не срабатывает, а если сразу же добавлять созданный new Image() в документ, то onload в браузерах будет срабатывать только один раз, когда изображения еще нет в кэше. Поэтому тут не тривиальная задача, как организовать еще и возможность работы скрипта при повторном нажатии на ранее загруженное изображение.

Kolyaj 26.10.2008 07:41

Octane,
описанную схему я не из теории взял, она у меня прекрасно работает.

EugenyK 26.10.2008 16:27

dummer,
Нижеизложенный код работает и в FF3.0 и в Opera9.61.
Даже после кеширования изображения onload срабатывает
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<title>11</title>
	<meta http-equiv="content-type" content="text/html; charset=windows-1251" />
	<meta name="robots" content="noindex, nofollow" />
</head>
<body>
	<img id='img' src='' alt='' style='width: 200px' />
	<a href='' onclick="document.getElementById('img').src='A_000.jpg'; return false;">1</a>
	<a href='' onclick="document.getElementById('img').src='A_002.jpg'; return false;">2</a>
	<a href='' onclick="document.getElementById('img').src='A_004.jpg'; return false;">4</a>
	<a href='' onclick="document.getElementById('img').src='A_006.jpg'; return false;">6</a>
	<script type='text/javascript'>
		document.getElementById('img').onload = function(){
			alert(this.src+' is loaded!')
		}
	</script>
</body>

Levsha 21.05.2010 05:18

EugenyK, вы не правы, специально перепроверил.
Если страница закеширована (то есть если обновлять страницу не через F5, а просто перейдя на нее по ссылке) , то событие onload не срабатывает.

Тут поможет свойство "complete" , объекта <img/>
Это свойство равно true , когда изображение уже загружено в кеш, и false если не загружно. Таким образом ваш код:
<script type='text/javascript'>
document.getElementById('img').onload = function(){
alert(this.src+' is loaded!')
}
</script>

меняем на:
<script type='text/javascript'>
if (document.getElementById('img').complete) {alert(this.src+' is loaded!')}
else document.getElementById('img').onload = function(){
alert(this.src+' is loaded!')
}
</script>
Если используем jQuery, то вполне можно сделать так:
<script type='text/javascript'>
if ($('#doorimg').attr("complete")) {alert(this.src+' is loaded!')}
... и т.д.
</script>


Часовой пояс GMT +3, время: 17:38.