Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Загружен ли объект Image()? 
:(
    Опции темы
Innuendo
Дата 14.7.2006, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 745
Регистрация: 24.12.2005
Где: Молдова

Репутация: 2
Всего: 6



Приветствую.
Опять я, и по опять по той же теме, что задавал неделю назад. Мне толком и не помогли =(

Есть страница - галлерея. При нажатии на превьюшку открывается нормальная фота в новом плавающем диве.
Фоты грузятся предварительно в массиве через new Image()
Я сделал заглушку уже как мне сказали, т.е. по умолчанию по превьюшкам щёлкать до фени, а после window.onload уже активируются нажатия.
Но если я кликаю по картинке сразу после загрузки, то сначала появляются кнопки в центре экрана, а потом догружается изображение. Полуается криво, потому что он центрует относительно его длины и ширины, а так как оно не загружено - его длина и ширина 0 -0 .
Я попробовал сделать загрузку.
При открытии страницы показывается див с лоадингом и весь массив проверяется на myImages[i].complete.
Если все загружены то див с лоадингом убираем, и активизируем нажатие превьюшек...
Но! дива вообще не видно, т.е. myImages[i].complete сразу равняется true у всех картинок, и первая картинка всё равно догружается позже.
вот ссылка:
http://luminitaverde.by.ru/photo_st.html
вот куски кода:
Код

//Предварительная загрузка картинок
function loadingPictures(){ 
myImages =  new Array();
PhotosNumber = 12;
for (var i=1; i<=PhotosNumber; i++)
{ myImages[i] = new Image();
}
myImages[1].src = "fotki/baza1.jpg"
myImages[2].src = "fotki/baza2.jpg"
myImages[3].src = "fotki/baza4.jpg"
myImages[4].src = "fotki/baza3.jpg"
myImages[5].src = "fotki/baza5.jpg"
myImages[6].src = "fotki/baza6.jpg"
myImages[7].src = "fotki/baza7.jpg"
myImages[8].src = "fotki/gorki.jpg"
myImages[9].src = "fotki/pleaj2.jpg"
myImages[10].src = "fotki/pleaj1.jpg"
myImages[11].src = "pleaj1.jpg"
myImages[12].src = "/fotki/pleaj3.jpg"
}

// Когда страница загружена активируем нажатия
function buttonsActivate(){
var loaded=0;
for (var i=1; i<=12; i++){
 loaded++;
 if (!myImages[i].complete) {
 loaded=0;
 }
 } 
if (loaded=12) {
// Все фоты загружены - активизируем нажатия по превьшкам и останавливаем лоадинг
for (i=1; i<=12; i++){
            document.getElementById(i).onclick = function() {
            pusk(this.id);
        }
        }
        stopLoading();    //останавливаем лоадинг

} else {
// а если нет, то повторяем енто дело через секунду
 setTimeout("buttonsActivate()", 10000);
}
}

//Функция остановки лоадинга
function stopLoading(){    
var div = document.getElementById("divWithOutPhoto")
    div.style.display='none';
}

function startLoading(){
var div = document.getElementById("divWithOutPhoto")
   //Выводим объект на экран, но делаем не видимым (чтоб можно было его двигать, а потом показать)
    div.style.visibility='hidden';
    div.style.display='';
var width=div.offsetWidth;
var height=div.offsetHeight;
//var left = ; var top = ;
//Тут код вычисления лефта и топа для разных браузеров
//Код длинный, поэтому не постю
div.style.left = left;
div.style.top = top;
//Делаем див видимым
div.style.visibility = 'visible';
}


//И вот это всё грузится при загрузке страницы:
window.onload = function(){
startLoading();
loadingPictures();
buttonsActivate();
}


Заранее спасибо, надеюсь на помощь. 


--------------------
=)
PM MAIL ICQ Jabber   Вверх
JSman
Дата 14.7.2006, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 279
Регистрация: 10.7.2006

Репутация: нет
Всего: 4



для исправления кривизны меняй размеры DIV. 

также советую использовать таблицы стилей.

для изображений советую использовать событие onload. 
PM ICQ   Вверх
Innuendo
Дата 14.7.2006, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 745
Регистрация: 24.12.2005
Где: Молдова

Репутация: 2
Всего: 6



onload для проверки?
Ну с дивом я проверку решил, но вот странное дело.
Я добавил проверку на загрузку фотографии на которую нажали.И пока он проверяет он крутит див-загрузки.
Открываю сайт. Дива загрузки не было, то есть все 12 картинок complete=true при том мгновенно. Но щёлкаю по любой фотке, и он её проверяет на complete. Первая проверка false. Он секунду крутит див и потом уже всё прорисовывает ровно и нормально.
Почему первая фотка была false, если он до этого проверил и все были true? =) 


--------------------
=)
PM MAIL ICQ Jabber   Вверх
JSman
Дата 14.7.2006, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 279
Регистрация: 10.7.2006

Репутация: нет
Всего: 4



у объекта image есть событие onload. я ему доверяю больше, чем свойству complete.

короче, алгоритм следующий:
каждому image'у присвоить событию onload функцию.
эта функция будет ставить флажок в твоем массиве, что данное изображение загружено.
2й проверки - не надо.

и еще совет:
на сайте должно быть 2 вида изображений. нормального размера и маленькие.
я с твоим вопросом серьезно не сидел. это просто совет. 

как бы я решил твою задачу...
при клике на маленькое показываешь DIV.
      описание DIV:
в стиле DIV укажи background-repeat:no-repeat; background-image:url(loading.gif); background-position:center; 
loading.gif в нем просто надпись "загрузка..."
img в div'е имеет visibility:hidden;

----------------------------------------

Добавлено @ 14:06 
ой как жаль остальная часть не отправилась smile

Добавлено @ 14:07 
 smile  
PM ICQ   Вверх
JSman
Дата 14.7.2006, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 279
Регистрация: 10.7.2006

Репутация: нет
Всего: 4



img в DIV'е - это будет изображение с хорошим качеством. пусть имеет ID = "img_ID"
не задавай в теге IMG атрибут SRC

var img = document.all('img_ID');

при клике на маленькое изображение:
1. img.style.visibility = "hidden"
2. img.src = "новый URL"
3. показать DIV
4. ждать событие img.onload

  код:

window.onload = function () {

var img = document.all('img_ID');
img.onload = function () {
img.style.visibility = "visible"

}

}
 
PM ICQ   Вверх
Innuendo
Дата 14.7.2006, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 745
Регистрация: 24.12.2005
Где: Молдова

Репутация: 2
Всего: 6



ну у меня и так 2 типа изображений: большие и маленькие...
c .onload у меян кстати не хотело работать. Я тогда перешел на complete.
Ну в общем всё работает уже вроде..
Но всё  равно спасибо за помощь.

А вот такой вопрос.
Если я не задал ещё срк new Image(), то что он проверяет на onload?
как можно понять такой код (я видел в темплейте галереи одной)
var preload = new Image();
preload.onLoad = function(){
preload.src = ''
...
и т.д.
} 


--------------------
=)
PM MAIL ICQ Jabber   Вверх
Innuendo
Дата 15.7.2006, 01:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 745
Регистрация: 24.12.2005
Где: Молдова

Репутация: 2
Всего: 6



щас вроде бы всё должно работать, но работает нормлаьно тока в ФФ.
вот пример:
http://luminitaverde.by.ru/newphoto.html

Я щас смотрю всё, пытаюсь разобрать этот код:
http://www.huddletogether.com/projects/lightbox/lightbox.js
там странно как-то
ImgPreloader=new Image();
ImgPreloader.onload = function() {
...
}
я если так у себя задам, то лоадинг будет вечно кружится... У меня есть тока .src задам раньше проверки на лоад картинка покажется
И зачем в конце этих проверок у них return false; ? что это даёт?  

Это сообщение отредактировал(а) Innuendo - 15.7.2006, 12:45


--------------------
=)
PM MAIL ICQ Jabber   Вверх
JSman
Дата 15.7.2006, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 279
Регистрация: 10.7.2006

Репутация: нет
Всего: 4



return false; они ставили точно для красоты.
смысла нет в них.

return обеспечивает выход из функции и передачу значения из функции.
прямо через события в DOM нельзя получать какие-либо значения. 
события здесь процедуры, а не функции. (т.е. функции без возврата значения).

обычно скрипты пишут в прогах, обеспечивающих подсветку кода. return обычно выделяют. и программеру понятно, где выход из функции. ведь не всегда поймешь после сотни скобочек, где она заканчивается. 

Цитата

Если я не задал ещё срк new Image(), то что он проверяет на onload?


ничего

Цитата

как можно понять такой код


все события объектов - это свойства, доступные для записи и чтения.
их тип - function

вот пример:
func() и func - это разные вещи
в 1м случае - это возврат значения, а 2е - указатель на функцию (грубо говоря, имеет тип "функция").

 
PM ICQ   Вверх
Innuendo
Дата 15.7.2006, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 745
Регистрация: 24.12.2005
Где: Молдова

Репутация: 2
Всего: 6



а что ты мне посоветуешь по теме?
я уже неделю мучаюсь... 5-ый раз переделываю всё заново. каждый раз пытаюсь по инному. Ужа бошка трещит от этой галлереи.
Я конечно могу использовать lightbox и все дела, но раз уже такое дело, то я хочу сам написать нормальную галлерею.
Можешь подсказать алгоритм к примеру? с примерами кода?
Я щас сделал так:
при клике на превью, создаётся объект Image(). и на его .onload происходит дальнейшие действия- показ изображения. А пока не unload он крутит див с загрузкой, как тока onload пошел, он див с лоадингом убирает.
В мозилле всё почти ОК, только если сразу после "Готово" на странице я кликну по превьюшке то он будет долго открывать страницу. В ие не хотел показывать фото который я уже открыл, но я это исправил (если кликаем по фоте которую уже открывали то он не создаёт новый объект а берет созданный уже)
А вот в Опере торба вообще =( Крутится лоадинг вечно и все дела =( 


--------------------
=)
PM MAIL ICQ Jabber   Вверх
12345c
Дата 15.7.2006, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Круглый
****


Профиль
Группа: Vingrad developer
Сообщений: 2018
Регистрация: 26.12.2005
Где: наша не пропадала ?

Репутация: 57
Всего: 101



В Опере, значит, не работает onload? Тогда сделай в ней по упрощённой схеме. 
PM WWW   Вверх
Innuendo
Дата 15.7.2006, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 745
Регистрация: 24.12.2005
Где: Молдова

Репутация: 2
Всего: 6



т.е. везде оставить с onload, а в Опере с image.complete и таймером... Можно, но остаётся 2 вопроса:
1) почему когда сразу после Done нажимаешь по превьюшке, картинка грузится гораздо дольше, чем нажав на неё после 2-3 секунд.
Т.е. всё таки он ещё грузит? а Done уже прошел же
2) В этом шаблоне лайтбокс, всё вроде основано на image.onload, но там и в Опере работает, только там как-то не так с этим onload... разобрать не могу толком их алгоритм 


--------------------
=)
PM MAIL ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0491 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.