|
|
|
| Проблема:
Есть несколко картинок, адреса которых хранятся в массиве. Их много (штук 14) и весят они тоже порядочно.
Функция показывает их все поочереди через интервал времени примерно так:
function images() {
document.someimage.src = imagearray[ $globalvar ];
$globalvar ++;
settimeout("images", 5000);
}
|
Очевидно, что все изображеня сначала скачиваются, а потом начинают отображаться. Грузиться очень долго, а ведь теоретически, у каждого изображения есть по 5 секунд для того, чтобы загрузиться перед началом показа (пока польователь видит предыдущее).
Вопрос:
Как реализовать загрузку изображения (тоесть обращение за ней на сервер) через интервал времени без обновленя страницы.
Спасибо зарание!
PS вот проблемный сайт - можете убедиться http://www.wei.lv/ru/?id=1 | |
|
|
|
|
|
|
|
для: Temnovit
(24.03.2006 в 15:48)
| | А может сначал загрузить все картинки, а уже потом выодить их по очереди? | |
|
|
|
|
|
|
|
для: Sergey89
(24.03.2006 в 15:50)
| | Так и происходит... но получаеться слишком долго. | |
|
|
|
|
|
|
|
для: Temnovit
(24.03.2006 в 15:51)
| | Немного не так. Вы загружаете картинку раз в 5 секунд, а надо загрузить все картинки за раз и менять их через 5 секунд. | |
|
|
|
|
|
|
|
для: Sergey89
(24.03.2006 в 15:53)
| | Хм... мне казалось, при таком механизме они сначала все скачиваются, а уж потом JavaScript начинает их менять. Я так подумал потому, что сначала очень долго ничего не происходит, а потом все меняеться без проблем.
если я ошибся, подскажите пожалуйста, как загрузить все картики сразу. | |
|
|
|
|
|
|
|
для: Temnovit
(24.03.2006 в 15:56)
| | не уследил. До этой функции вы уже загружаететкартинки? | |
|
|
|
|
|
|
|
для: Sergey89
(24.03.2006 в 15:58)
| | до этой функции я их описываю в массиве. И больше нигде. | |
|
|
|
|
|
|
|
для: Temnovit
(24.03.2006 в 15:56)
| | Создайте ещё 1 массив к массиву ссылок на картинки, в который пишите признаки загруженности картинок. Признаки будут ставиться по onload. Для этого, видимо, надо их грузить в невидимые слои (visibility:hidden), на которые затем создаёте ссылки в первом массиве, тоже по onload конкретной картинки. К показу допускаются только загруженные, а чтобы хотя бы одна картинка в массиве была, добавьте в начале куда-нибудь в 0-й элемент картинку "Ждите загрузки...", которая сотрётся (ссылка перепишется) после первой загруженной правильной картинки. | |
|
|
|
|
|
|
|
для: 12345
(24.03.2006 в 16:08)
| | думаю с такой задачей неплохобы справился flash | |
|
|
|
|
|
|
|
для: AlexSol
(24.03.2006 в 16:15)
| | Да - соглсен. Но передо мной задача - никакого флеша :) | |
|
|
|
|
|
|
|
для: Temnovit
(24.03.2006 в 16:16)
| | Только тут с онлоадом проблема - при загрузке в новом окне он работает, а при повторной загрузке - нет. Видимо, считает, что картинка уже загружена. Проверял на файлах, не на сервере.
См. код (тут обошёлся без слоёв, это удобнее):
<SCRIPT>
im=new Image();
im.src='snow.gif';
im.onload=function(){setTimeout("document.getElementById('i1').src=im.src;",999);}
</SCRIPT>
<img id=i1 src=snow21.gif onclick=im.onload()>
|
Попробуйте проверить это на сервере, если тот же эффект, то надо как-то решать. | |
|
|
|
|
|
|
|
для: 12345
(24.03.2006 в 16:40)
| | Поясните ка работет new Image();
Объект создется динамически? Получется, если я буду создавать объекты по ходу показа, время загрузки распределится? | |
|
|
|
|
|
|
|
для: Temnovit
(24.03.2006 в 17:30)
| | Image - это объект JS, который позволяет динамически загружать картинки. | |
|
|
|
|
|
|
|
для: Temnovit
(24.03.2006 в 17:30)
| | Динамически. Но надо отследить момент загруженности, а по onload это не всегда удаётся . Можно идти кривым путём и проверять периодически im.width . Если картинки нет (неправильный УРЛ), IE даёт =28, OPera, FF - =0. Если в процессе загрузки, то IE может давать 0. Но они будут давать отличное от 0 и при неполной загрузке, вероятно - надо исследовать.
...
Если надо для IE более определённое указание о загруженности, то в нём (только) работает
im.readyState=='complete'. Для просмотра запишите в пример
<img id=i1 src=snow21.gif onclick=im.onload();alert(im.readyState);>
| (но что в нём будет при недозагруженной картинке - тоже вопрос открытый) | |
|
|
|