Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: предзагрузка картинок
 
 автор: Diver   (17.02.2006 в 00:08)   письмо автору
 
 

Привет всем...
Беспокоит вас Diver. Зацените, кому не лень:
сделал я свой собственный сайтик. Вставил в него самый наибанальнейший прелоад. А он не

работает. А я в javascript'e совсем дурак был. Ну, погулял по интернету, нашел с десяток

других предзагрузок, выбрал работающие и засунул на страницy. А с недельку назад зашел на

один сайт и увидел там ЧУДО. Сайт грузится сверху вниз. Блоками. Судя по всему слоями. Я

ихний скрипт выдрать пытался (знаю, что плохо, каюсь). Но он в текстовом виде кб 15 весит и

"завязан" на еще пару тяжелых скриптов, так что плохо. Сел учить javascript, благо я в HTML

не новичок, хоть со скриптами и не дружу.
И понял я, что большинство так называемых скриптов предзагрузки всего лишь создают список

картинок (массив, если точнее), который потом просят за onload'ить в body. Это как-то не

по-русски. Сел я свой скрипт писать. И вот напоролся на проблему: как спросить у браузера, а

загрузил ли он картинки?
Мысль такая: разбить документ на 3-4 слоя и написать скрипт, который будет работать по

принципу: браузер, ты загрузил эти три картинки? сделай слой1 вилимым. Браузер, ты загрузил

следующие две картинки? Сделай слой2 видимым. Но вот будучи чайником я не знаю, как браузеру

такой вопросик задать...
Задачка для одаренных... может, выручите?

   
 
 автор: 12345   (17.02.2006 в 02:22)   письмо автору
 
   для: Diver   (17.02.2006 в 00:08)
 

Нужна идея? Давай так, моя идея, твоё исполнение.
Тогда делаем так: грузим группы картинок в теги с absolite, hidden (не display! , а то FF может не сработать). В каждом onload. Когда все сработают, открываем слой или перегоняем src в переменные, а слой удаляем (возможны глюки с истинностью завершения загрузки, так что с удалением я бы не спешил сначала). Грузим следующую порцию, и т.д.

Причём, это можно (или нужно, пробуйте на практике) грузить после onload документа без картинок. Через innerHTML, создаваемый по группам. (Что динамическая подгрузка картинок работает - давно проверенный факт.)

   
 
 автор: Diver   (17.02.2006 в 15:55)   письмо автору
 
   для: 12345   (17.02.2006 в 02:22)
 

идея классная - только напоминаю, я скрипты только начал врубать. Я НЕ прошу сделать это за меня. Я исполнить такое не очень понимаю как. Можно либо чуть-чуть подробнее (не в скриптах, а в том, что значат написанные Вами слова). Либо указать мне (если ну трудно), ответ на вопрос, как спросить у браузера, загрузил ли он... Заранее спасибо

   
 
 автор: 12345   (17.02.2006 в 16:41)   письмо автору
 
   для: Diver   (17.02.2006 в 15:55)
 

Тогда другое дело - вам, действительно, нужен пример, а его довольно долго писать.

А попробуйте поступить проще (другая идея). Если надо выдавать картинки группами, то это встроено в HTML через таблицы. Объединяйте те блоки, которые должны высветиться сразу, каждый в свою таблицу. Загрузка начинается по очереди в порядке написания на странице. Таблица прорисовывается, как только все размеры картинок в ней станут известны (поэтому картинки пишите БЕЗ height, width) ). И никаких скриптов.

Недостаток только в том, что если картинок 20, а надо выводить по 3, то загружаться начнут сразу 20, как только текст с УРЛами загрузится, поэтому последующие будут несколько заметлять загрузку первых. Но всё равно, они начинают грузиться по очереди появления в тексте, что легко видеть на многих других сайтах.

   
 
 автор: Diver   (17.02.2006 в 19:49)   письмо автору
 
   для: 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.

Я, собственно, уверен, что смогу сей скрипт написать, так как он не сложный. Но я нигде не смог найти, как проверить главное условие (загрузил ли все картинки или, по крайней мере, указанные). Потому обращаюсь за Вашей помощью : скажите, возможно ли "спросить" это у браузера. Заранее благодарен

   
 
 автор: 12345   (17.02.2006 в 20:52)   письмо автору
 
   для: 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 мин., напр.) всё равно вывести блок.

   
 
 автор: Diver   (19.02.2006 в 01:59)   письмо автору
 
   для: 12345   (17.02.2006 в 20:52)
 

Спасибо тебе, неведомый друг...
Только вместо алерта в первом варианте можно написать что угодно. Например, условие на порверку второй картинки с конечным решением о видимости слоя. Второй вариант, к сожалению, гиморен ввиду немаленького размера моего сайта. Зайди, если время будет. Заценишь мой хенд-мэйд. Говорят, симпатично...
Еще раз спасибо

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования