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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Загрузилась ли картинка или существует ли, Чем проверить 
:(
    Опции темы
Иль
Дата 1.4.2005, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Я все еще тут (пора, пора на http://forum.vingrad.ru/index.php?showtopic=47159 smile )

Упрел!

Создаю объект-изображение, подгружаю в него новую картинку, проверяю на complete и только тогда в целевом изображении меняю SRC.
Но это не все!!! Проверяю целевое изображение на complete и считываю нужные мне свойства в надежде получить новые значения.
Нормалек, работает. Ок, сливаем бадягу в инет. М-да. Чешу злобно голову...
Получилось какак-то смутно. Чем больше тайминги у setInterval, тем больше шансов застать новые значения свойств и чем загруженней браузер (многооконный) - тем меньше. Отсюда и переодические глюки перемены свойств при смене туда и обратно.

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

Это сообщение отредактировал(а) Иль - 4.4.2005, 20:14


--------------------
Ты виндусятник?... А я да. smile
PM MAIL ICQ Skype GTalk   Вверх
Sardar
Дата 1.4.2005, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



А зачем тебе мониторить свойства картинок? Покажи код.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Иль
Дата 1.4.2005, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Слава тебе господи, отпустило smile , разобрался. Рад до слез smile

Sardar, а ведь все благодаря тебе, спасибо!!!

Я раньше не знал и нигде онлайн не мог найти (может просто не замечал), как задавать событие на к-либо элемент в функции, а не инлайн. Даже специально везде рылся (подумывал, что такого нет). А посмотрев код в предлагаемом тобой топике сразу сообразил. Так что прошу для чайников (и их подруг smile ) занести в FAQ данный синтаксис. Например
Код

element.onclic=метод;
...
function метод () {описание действий}
 

Даже обидно, как все просто.
И что вы думаете! Только я (после смены SRC) посадил мою картинку на onload, которому прописал метод считывания ее размеров, так сразу все стало работать без перебоев с первого раза!
smile Интересная деталь - если тестить локально, то ИЕ продалжает глючить, но через инет все браузеры работают - протестировал на 100 картинках.

И еще, та чек-функция смены SRC в твоем топике (47159) просто супер. Руки бы не дошли, а ты так все ладно сделал. Спасибо огромное.

Забыл про код - да там тривиальщина, чтоб дизаин не портился. Картинка изменилась - подгоняем по ее размерам соседний элемент (эстетика, Ё-моё). Уменьшилась - обратно.
Добавлено @ 15:58
Не, если интересно, я вырву код из контекста, очищу от воды и выложу...

Это сообщение отредактировал(а) Иль - 4.4.2005, 20:10


--------------------
Ты виндусятник?... А я да. smile
PM MAIL ICQ Skype GTalk   Вверх
Sardar
Дата 1.4.2005, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Цитата
занести в FAQ данный синтаксис

Не нужно, это базовый JS, учится в любом учебнике, на крайняк опытом smile Важно понять что всё в JS это обьекты, функция тоже обьект. У обьекта есть какието поля, также можно создавать свои поля. У обьектов есть конструктор, в поле prototype которого интерфейс обьекта. Жаль что к интерфейсу HTML элементов доступа из ИЕ по моему нет, в Опере и Мозилле есть обьекты DOM1, например HTMLImageElment. Учти что это не конструктор элемента, через него нельзя(теоретически) создать элемент, но можно доратся до интерфейса.

Любой обьект можно создать в некотором контексте, в котором он и будет жить, например внутри функции. Следовательно функции можно вкладывать друг в друга, при этом важно что все переменные обьявленные в функции выше продолжают быть доступными в функции ниже, даже после выхода. Запутанно? smile Смотрим пример:
Код
<script type="text/javascript">
<!--
function test() {
  var a=0;
  function timertest() {
    a++;
    document.getElementById("dbg").innerHTML+="<b>"+a+"</b><br />\n";
  }
  window.setInterval(timertest, 1000);
}

//-->
</script>

<button onClick="test()">Test</button>
<div id="dbg"></div>

Жмём на кнопку, видим что каждый раз запускается новый тред имеющий свой собственный контекст функции test с переменной а.

А вообще в JS много чего интересного, те же геттеры/сеттеры в Мозилле smile


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Aliance
Дата 1.4.2005, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 55
Всего: 137



Цитата
Я раньше не знал и нигде онлайн не мог найти (может просто не замечал), как задавать событие на к-либо элемент в функции, а не инлайн. Даже специально везде рылся (подумывал, что такого нет).

А это я для кого писал: http://forum.vingrad.ru/index.php?showtopic=32350 =)
PM MAIL WWW ICQ Skype   Вверх
Иль
Дата 1.4.2005, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Увы и ах, читал много раз, аголова не приняла. Только на живом примере.

Aliance, Sardar, не обижайтесь, теперь я вижу, что там это есть, Но!
Так, как там это написано... Не учебник же.
Итак-то есть непонятки.

Теперь не вопрос, но неделю назад мозги запудрились, даже не разглядел. Нужен базис для восприятия.


--------------------
Ты виндусятник?... А я да. smile
PM MAIL ICQ Skype GTalk   Вверх
Иль
Дата 4.4.2005, 20:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Опять замечено продолжение глюка в обоих бродилках, если не использовать this.
Если описывать метод, привязанный к onload, не как предложил Sardar в указанном топике (с использованием this), то опять, при первой смене картинок, указанный глюк появляется!!!
Видимо без this теряется связь с еще не кэшированной, только закаченной картинкой.
Добавлено @ 20:32
разбираться, правда, и делать выводы некогда - решение есть.


--------------------
Ты виндусятник?... А я да. smile
PM MAIL ICQ Skype GTalk   Вверх
Sardar
Дата 5.4.2005, 01:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Цитата
при первой смене картинок, указанный глюк появляется!!!
Видимо без this теряется связь с еще не кэшированной, только закаченной картинкой.

Подробнее об этом? Что за указанный глюк? Ссылка this указывает на того кому принадлежит метод, в случае с "традиционнымйи обработчиками событий" ссылка указывает на обьект, к событию которого мы задавали функцию-обработчика.

Убедись что в твоём случае this это именно то что ты думаешь(опроси{правильный ответ}: nodeType{1}, tagName{IMG}).

Ссылка this указывет на обьект-картинку в нутри обработчика события, а каково его состояние(загруженно/нет) абсолютно не важно, ошибка в другом smile


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Иль
Дата 5.4.2005, 07:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Sardar @ 5.4.2005, 01:13)
Подробнее об этом? Что за указанный глюк?

Меняю SRC картинки, считываю ее высоту. Глюк заключается в том, что при первой смене SRC ее свойства меняются с большой задержкой и при считывании я получаю старые значения.


--------------------
Ты виндусятник?... А я да. smile
PM MAIL ICQ Skype GTalk   Вверх
Aliance
Дата 5.4.2005, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 55
Всего: 137



Кинь кусок кода где ты меняешь Src и где параметры (ширина, высота)
PM MAIL WWW ICQ Skype   Вверх
Иль
Дата 5.4.2005, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Вот проблемный код
Код

<html><head>
<script language="JavaScript" type="text/JavaScript">
function ata(elem){
elem.src="pic2.gif";
document.getElementById("tat").style.height=elem.height;
}
</script></head>
<body>
<img src="pic1.gif" onClick="ata(this)" style=" border:3px solid">
<div id="tat" style="background-color:#009999; width:30px">123</div>
</body></html>

Условие: Картинка pic2.gif выше pic1.gif
Описание:
Запускаем впервые в ИЕ или Лисе, кликаем по картинке и слой не меняет свою высоту. Кликаем второй раз и слой вырастает в высоту.

Повторнуй опыт с тем же результатом:
В Лисах под ХР достаточно нажать обновить, а в ИЕ требуется перезапуск браузера.

Извините, беспроблемный код положу после - на работе аврал.


--------------------
Ты виндусятник?... А я да. smile
PM MAIL ICQ Skype GTalk   Вверх
Aliance
Дата 5.4.2005, 21:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 55
Всего: 137



У IMG не заданы параметры (null), так их нельзя изменять.
А как из кода выше узнать какой первый раз какой второй? Это я так понимаю в другом коде делается, да? А то иначе не правельно. В общем задай картинке ее реальные height и width и запусти заного.
PM MAIL WWW ICQ Skype   Вверх
Иль
Дата 6.4.2005, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Да, так и есть, это упрощенный донельзя код чтоб показать проблему.
Я немного не понял.
Высоту и ширину задавать в HTML не получается - поидеи картинок много и они разные. И еще, тогда ж нельзя использовать картинки разного размера - браузер отмаштабирует новую картинку под размеры, указанные в HTML.
Если это делать в JS, пробежав по коллекции после загрузки, но у изображений height и width уже есть автоматически.

Это сообщение отредактировал(а) Иль - 7.4.2005, 14:30


--------------------
Ты виндусятник?... А я да. smile
PM MAIL ICQ Skype GTalk   Вверх
Sardar
Дата 6.4.2005, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Всё верно, картинка не успела подгрузится, а ты уже опрашиваешь её свойства. В JS всё работает паралельно(асинхронно), таймеры, загрузка картинок и т.п.

Когда кликаешь по второму разу картинка уже в памяти, размеры известны, код срабатывает. Отсюда вывод: ловим событие onload, опрашиваем её своства. Ты уже так и сделал smile


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


 




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


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

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