|
|
|
| Привет всем...
Беспокоит вас Diver. Зацените, кому не лень:
сделал я свой собственный сайтик. Вставил в него самый наибанальнейший прелоад. А он не
работает. А я в javascript'e совсем дурак был. Ну, погулял по интернету, нашел с десяток
других предзагрузок, выбрал работающие и засунул на страницy. А с недельку назад зашел на
один сайт и увидел там ЧУДО. Сайт грузится сверху вниз. Блоками. Судя по всему слоями. Я
ихний скрипт выдрать пытался (знаю, что плохо, каюсь). Но он в текстовом виде кб 15 весит и
"завязан" на еще пару тяжелых скриптов, так что плохо. Сел учить javascript, благо я в HTML
не новичок, хоть со скриптами и не дружу.
И понял я, что большинство так называемых скриптов предзагрузки всего лишь создают список
картинок (массив, если точнее), который потом просят за onload'ить в body. Это как-то не
по-русски. Сел я свой скрипт писать. И вот напоролся на проблему: как спросить у браузера, а
загрузил ли он картинки?
Мысль такая: разбить документ на 3-4 слоя и написать скрипт, который будет работать по
принципу: браузер, ты загрузил эти три картинки? сделай слой1 вилимым. Браузер, ты загрузил
следующие две картинки? Сделай слой2 видимым. Но вот будучи чайником я не знаю, как браузеру
такой вопросик задать...
Задачка для одаренных... может, выручите? | |
|
|
|
|
|
|
|
для: Diver
(17.02.2006 в 00:08)
| | Нужна идея? Давай так, моя идея, твоё исполнение.
Тогда делаем так: грузим группы картинок в теги с absolite, hidden (не display! , а то FF может не сработать). В каждом onload. Когда все сработают, открываем слой или перегоняем src в переменные, а слой удаляем (возможны глюки с истинностью завершения загрузки, так что с удалением я бы не спешил сначала). Грузим следующую порцию, и т.д.
Причём, это можно (или нужно, пробуйте на практике) грузить после onload документа без картинок. Через innerHTML, создаваемый по группам. (Что динамическая подгрузка картинок работает - давно проверенный факт.) | |
|
|
|
|
|
|
|
для: 12345
(17.02.2006 в 02:22)
| | идея классная - только напоминаю, я скрипты только начал врубать. Я НЕ прошу сделать это за меня. Я исполнить такое не очень понимаю как. Можно либо чуть-чуть подробнее (не в скриптах, а в том, что значат написанные Вами слова). Либо указать мне (если ну трудно), ответ на вопрос, как спросить у браузера, загрузил ли он... Заранее спасибо | |
|
|
|
|
|
|
|
для: Diver
(17.02.2006 в 15:55)
| | Тогда другое дело - вам, действительно, нужен пример, а его довольно долго писать.
А попробуйте поступить проще (другая идея). Если надо выдавать картинки группами, то это встроено в HTML через таблицы. Объединяйте те блоки, которые должны высветиться сразу, каждый в свою таблицу. Загрузка начинается по очереди в порядке написания на странице. Таблица прорисовывается, как только все размеры картинок в ней станут известны (поэтому картинки пишите БЕЗ height, width) ). И никаких скриптов.
Недостаток только в том, что если картинок 20, а надо выводить по 3, то загружаться начнут сразу 20, как только текст с УРЛами загрузится, поэтому последующие будут несколько заметлять загрузку первых. Но всё равно, они начинают грузиться по очереди появления в тексте, что легко видеть на многих других сайтах. | |
|
|
|
|
|
|
|
для: 12345
(17.02.2006 в 16:41)
| | В любом случае спасибо Вам за заинтересованность.
Группами картинки выдавать не то чтобы нужно, но желательно. А страничная структура итак табличная. Проблема только в том, что сначала браузер грузит текст, а потом картинки. И обычный прелоад не помагает.
Я придумал такую систему: с помощью функции if else в скрипте (в принципе, наверное, еще и for потребуется) написать скрипт, учитывающий
1) все, что отображается на странице, поделено на три слоя - "шапка сайта" "навигационное меню" и "собственно контент". Шапка содержит две картинки и заголовок. Панель - одну картинку, прописанную в стиле как фон ячейки, и вызванную функцией class="" 14 раз (по числу разделов). А контент на разных страницах разный. Базовое, прописанное в свойствах состояние всех трех слоев - "hidden". В скрипте будет обращение к слоям. Принцип:
if (browser loaded all images in div-1) --> document.all.layer1.style - visible
else - return
if (browser loaded all images in div-2) --> layer2 - visible
ну и обезопасить себя
if browser loaded all images in layer1 and layer2 - make layer3 (контент) - visible.
Я, собственно, уверен, что смогу сей скрипт написать, так как он не сложный. Но я нигде не смог найти, как проверить главное условие (загрузил ли все картинки или, по крайней мере, указанные). Потому обращаюсь за Вашей помощью : скажите, возможно ли "спросить" это у браузера. Заранее благодарен | |
|
|
|
|
|
|
|
для: Diver
(17.02.2006 в 19:49)
| | Возвращаемся к 1-му плану. Прямой ответ на вопрос такой: спрашивают так: проверяют наличие тега - document.getElementById('image5'), затем document.getElementById('image5').src ,
Для 5-й картинки:
if(document.getElementById('image5') && document.getElementById('image5').src) alert ('загружена')
|
Но для этого надо периодически опрашивать. Чтобы этого не делать, читайте план: на каждой картинке ставить onload, и тем самым отмечать, что данная - загрузилась.
<img id=image5 src=... onload=ff(this)>
Скрипт:
ff=function(t){отметка где-то, что t загружена и проверка, что все нужные загрузились; если да, грузим следующий блок}
Т.е. первый вариант возможен, но длинный, и не уверен, что без глюков будет работать. Возможно, недозагруженная картинка покажет свой src. Поэтому лучше 2-й, все равно по событию конца загрузки нужно реагировать. Не надо также забывать о случае, что картинка не загрузится, и по таймеру (1 мин., напр.) всё равно вывести блок. | |
|
|
|
|
|
|
|
для: 12345
(17.02.2006 в 20:52)
| | Спасибо тебе, неведомый друг...
Только вместо алерта в первом варианте можно написать что угодно. Например, условие на порверку второй картинки с конечным решением о видимости слоя. Второй вариант, к сожалению, гиморен ввиду немаленького размера моего сайта. Зайди, если время будет. Заценишь мой хенд-мэйд. Говорят, симпатично...
Еще раз спасибо | |
|
|
|
|