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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как запросить по у IMG что рисунок загружен?? 
:(
    Опции темы
InfMag
Дата 29.1.2008, 22:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


…
***


Профиль
Группа: Завсегдатай
Сообщений: 1037
Регистрация: 21.11.2004

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



Вобщем задаю одному тегу img адрес на рисунок - 
Код

<img id="iimm">
<script>
document.getElementById('iimm').src="images/image.jpg";
</script>

Как мне узнать что рисунок загружен? Просто нужно выполнить действие именно после того как рисунок загрузится...
PM   Вверх
NNaarreekk
Дата 29.1.2008, 23:50 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 768
Регистрация: 23.6.2007
Где: Армения

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



Код

<img id="iimm">
<script>
document.getElementById('iimm').src="images/image.jpg";
document.getElementById('iimm').onload=function;
</script>



Добавлено через 38 секунд
Или onLoad
PM MAIL WWW   Вверх
SelenIT
Дата 30.1.2008, 23:22 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 49
Всего: 401



Цитата(NNaarreekk @  29.1.2008,  23:50 Найти цитируемый пост)
Или onLoad

Нет. Все обработчики событий - всегда в нижнем регистре, и только.


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
ksnk
Дата 30.1.2008, 23:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 84
Всего: 386



NNaarreekk, неплохо бы еще проверить флажок complete. Если картинка уже загружена в кэш - никакого вызова onload не будет.
Код

var img=document.getElementById('iimm')
img.src="images/image.jpg";
if (img.complete) 
  function()
else
  img.onload=function;

Как-то так...

P.S. Дежа вю... или склероз прогрессирует ;-) Но эта тема уже поднималась...

Это сообщение отредактировал(а) ksnk - 30.1.2008, 23:44


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
NNaarreekk
Дата 1.2.2008, 00:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 768
Регистрация: 23.6.2007
Где: Армения

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



ksnk, а я без этого сделал и нормально работает!
ТУТ
PM MAIL WWW   Вверх
SelenIT
Дата 1.2.2008, 01:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 49
Всего: 401



Цитата(ksnk @  30.1.2008,  23:44 Найти цитируемый пост)
Если картинка уже загружена в кэш - никакого вызова onload не будет.

Точно дежа вю. Я еще специально делал тестик (возможно, некорректный?) и вопрошал, в каком браузере и при каких настройках случается отквоченное - безрезультатно. ksnk, буду очень благодарен за демку проблемы!


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
ksnk
Дата 1.2.2008, 02:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 84
Всего: 386



SelenIT, озадачился... поисследовал... Сочинил тестик и начал разнообразно копировать сорцы картинок из одного места в другое. и поначалу просто впал в недоумение по поводу - а когда-ж on complete НЕ срабатывает... Оказалось, что если не заморачиваться с созданием нового объекта new Image(), то уличить в халтурности удается только Opera, но впрочем опера тут не эталон коректности... 
Вот такой тестик
Код

<script>

function trace(s){document.getElementById('debug').innerHTML+=' '+s;}

function gotcha(e){
    trace((e &&e.id||'X')+':complete');
}

function xchange(i1,i2){
trace('<b>xchange</b>');
var i1=document.getElementById(i1),
    i2=document.getElementById(i2),
    src1=i1.src
    i1.src=i2.src
    i2.src=src1;
}
function xcopy(i1,i2){
trace('<b>copy</b>');
var i1=document.getElementById(i1),
    i2=document.getElementById(i2)
    i2.src=i1.src
}

var imgs=[], addition='?'+Math.random();

function crimage(i1,x){
trace('<b>NewImage</b>');
    var img= new Image(),
    i1=document.getElementById(i1)
    img.src=i1.src+(x?addition:''); trace('['+img.src+'].complete='+img.complete)
    img.onload=gotcha;
    imgs.push(img); // just to remember it 
}
</script>

<body>

<img src="indrekisxiii.gif" id="i3" onload="gotcha(this)">
<img src="indrekis.gif" id="i4" onload="gotcha(this)">
<input type="button" value="switch" onclick='xchange("i3","i4")'>
<input type="button" value="copy" onclick='xcopy("i3","ii3")'>
<img src="" id="ii3" onload="gotcha(this)">
<input type="button" value="create image test" onclick='crimage("i3")'>
<input type="button" value="create image test(reload)" onclick='crimage("i3","x")'>

<div id='debug'>
</div>
</body>

позволяет как-то визуализировать возможные проблемы onload и completе.
Кнопка switch меняет местами 1 и 2-ю картинки, меняя им src. 
Кнопка copy копирует src первой картинки в третью
Кнопка "create image test" сочиняет new image и делает ему src из какой-то картинки
Кнопка "create image test(reload)" сочиняет new image и делает ему src из какой-то картинки с какой-то статической добавкой.

Были проделаны в 3-х броузерах следующие телодвижения.
switch, switch, copy, switch, switch,  create image test, create image test(reload), create image test(reload).

В принципе - первые телодвижения только показывают, что в броузерах с картинками - элементами DOM все нормально, за исключение Opera. Интерес возникает когда нажимаем на две последние кнопки.
Код

NewImage [http://fck.me/test/indrekisxiii.gif].complete=true 
NewImage [http://fck.me/test/indrekisxiii.gif?0.02614393268561277].complete=false X:complete 
NewImage [http://fck.me/test/indrekisxiii.gif?0.02614393268561277].complete=true

Что означает, что для первого создания new Image никакого onload вызвано не было. Для второго (с уникальным пока еще именем) - было, а вот для второго раза уже нет.



Это сообщение отредактировал(а) ksnk - 1.2.2008, 02:55


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
SelenIT
Дата 1.2.2008, 05:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 49
Всего: 401



Мда... ksnk, большое спасибо за исследование и тестовый скрипт!

Действительно, Оперы халтурят, причем 8-я и 9-я по-разному. В 8-й (8.02 и 8.5) при xchange у меня onload для i4 почему-то срабатывает дважды (по какой логике - ума не приложу). В 9-й (9.21) xchange работает как в FF (onload-ы по одному разу), зато copy шалит - onload срабатывает только первый раз (как при создании объекта Image с параметром). Вот в создании объекта Image они единодушны - onload срабатывает только при complete==false. Так что подстраховка и вправду нужна...


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


 




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


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

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