Jump to content
  • 0

Аналог readyState для ФФ и Опера


Дядя Саша
 Share

Question

В ИЕ нет проблем, а как проверить загружен ли элемент в ФФ И Опере не знаю. readyState там вообще поддерживается?

Эту проблему решил, появилась следующая :)

var timer;
function choiceBG(){
if(timer){
clearInterval(timer)
}
if(preloadIMG.readyState == "complete"){
BG = oldBG;
setOpacity(true);
}else if(preloadIMG.readyState == undefined){
if(preloadIMG.complete){
BG = oldBG;
setOpacity(true);
}else{
BG = "url(" + loadingIMG.src + ") 50% no-repeat";
if(bigIMG.style.background.substring(bigIMG.style.background.indexOf("img/"), bigIMG.style.background.indexOf(".gif")) != BG.substring(BG.indexOf("img/"), BG.indexOf(".gif"))){
setOpacity(true);
}
timer = setTimeout("choiceBG()", 1000);
}
}else{
BG = "url(" + loadingIMG.src + ") 50% no-repeat";
if(bigIMG.style.background.substring(bigIMG.style.background.indexOf("img/"), bigIMG.style.background.indexOf(".gif")) != BG.substring(BG.indexOf("img/"), BG.indexOf(".gif"))){
setOpacity(true);
}
timer = setTimeout("choiceBG()", 1000);
}
}

Сделал только что, поэтому ф-ия громоздка. Так проблема с ФФ, наверно что-то с кэшированием. В опере работает как надо, а в ФФ только при первом вызове, в дальнейшем задержки не происходит, условие (preloadIMG.complete) выполняется мгновенно, как это исправить?

Может ли это быть потому, что один и тот же обьект preloadIMG, но перед каждым вызовом ф-ии выше, src свойство получает новое значение.

Проблема решена. Я просто обьявил переменную в функции которая вызывается при клике. А результат передал как параметр.

Хотя может кто знает лучший способ? И вообще это можно расценивать как баг ФФ?

Или как мой? :P

Link to comment
Share on other sites

7 answers to this question

Recommended Posts

  • 0
В ИЕ нет проблем

уже тут нужно задумываться

:)

Дело в том что изображение не добавляется как изображение, а устанавливается фоном для слоя. Я не знал как проверить его загруженость и решил делать прелоад этого изображения, проверять загружено ли оно и после этого подставлять preloadIMG.src для фона. Вроде все получилось.

Тоесть, при клике на маленьком изображении выполняется ф-ия, которяя смотрит адрес этого изображения, извлекает из него нужный мне номер, и возвращает ссылку уже на большую картинку, потом создается новый обьект изображения (он всего один, тоесть картинка подгружается уже после клика). Далее если он загружен, меняется фон большого слоя. Все это сделано потому, что изображения плавно исчезают и появляются используя прозрачность. Если без пред. загрузки, то локально все нормально, а вот пользователи диалап'а увидят только его плавное исчезновение...

Вот такая ерунда вышла, еще и очень громоздкая :P

Link to comment
Share on other sites

  • 0

Дядя Саша

Что ж, попробую "по буквам". :)

При клике получаем адрес и создаем новой экземпляр объекта Image:

var src = /* извлекаем из кликнутой превьюшки */;
var preImg = new Image;
preImg.onload = function () {
/* здесь проверка - закончена ли анимация с прозрачностью*/
/* если закончена, а оно скорее всего так и будет, то: */
[ссылка на элемент <img>].src = this.src;
/* запуск анимации по появлению */
};
preImg.src = src;

Вот и все...

Link to comment
Share on other sites

  • 0

Да, спасибо, примерно так все и есть. Только одна и та же ф-ия делает элемент прозрачным, меняет фоновое изображение и делает его видимым обратно. Если фоновый рисунок загружен, она получает его адрес, если нет - ссылку на GIF анимашку (она имитирует ход загрузки), которая так - же плавно появляется и исчезает тогда когда фон загружен, что каждые 300 миллисекунд проверяется с помошюь интервала.

Так вот сперва тестил с GIF - изображениями - все пучком, а JPG иногда появляется незагруженным до конца (только в ФФ и в Опере, из-за свойства complete думаю), пришлось отказаться от возможности постепенной загрузки для JPG.

Но смотрится прикольно, осталось только как-то все это красивенько оформить :)

Link to comment
Share on other sites

  • 0

Я тоже читал, что оно ненадежно.

А какое же тогда свойство использовать, которое есть в стандарте? Как же тогда в ФФ и в Опере проверить загруженость элемента без участия сервера?

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy