![]() |
Модераторы: Sardar, Aliance |
![]() ![]() ![]() |
|
Sardar |
|
||||||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 16 Всего: 317 |
Часто стал всплывать вопрос: как интерактивно загрузить картинку, при этом показать её только когда она полностью загрузится.
Внимательно рассмотрим задачу, выделим три момента:
Сделаем некий API у картинок, что бы было удобней. Тут сразу упрётся ИЕ рогом, оворя что Image.prototype менять нельзя. Порешаем вторым вызовом проверки:
Как видим код предельно прост. Используем например так:
Само сообщение о загрузке реализовал просто:
Здесь можно не только увидеть но и покликать: http://files.vingrad.ru/Sardar/ImageLoad.htm ![]() -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
||||||
|
|||||||
Aliance |
|
|||
![]() I ♥ <script> ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6418 Регистрация: 2.8.2004 Где: spb Репутация: 6 Всего: 137 |
![]() Вау, Avril Lavigne ![]() А третия кнопка у меня ничего не делает ![]() |
|||
|
||||
Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 16 Всего: 317 |
Aliance не совсем, эта кнопка устанавливает последнюю удачно загруженную картинку. Жём на первую кнопку, картинка поменялась, жмём на третью, картинка вернулась. Жмём первую, а затем вторую(не существующая), последная удачная теперь картинка от первой кнопки.
Собстна это не нужно, просто реализовал ![]() -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
Aliance |
|
|||
![]() I ♥ <script> ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6418 Регистрация: 2.8.2004 Где: spb Репутация: 6 Всего: 137 |
Вот небыло этого у мен почему-то...)) |
|||
|
||||
Иль |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 544 Регистрация: 3.3.2005 Где: Москва Репутация: нет Всего: 14 |
Я не понял, объясните пожалуйста.
Т.е. событию onload этой картинки мы назначаем метод-обработчик смены SCR у родителя, описанный функцией changeSrcOL? И еще тут не понял, зачем?
Как эта ссылка понадобится в onload, ведь в changeSrcOL() "говорится" о ".parentImage"?? А так боле-менее понятно ![]() -------------------- Ты виндусятник?... А я да. ![]() |
||||
|
|||||
Sardar |
|
||||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 16 Всего: 317 |
Код приведённый выше работает с любой картинок на странице. У каждой картинки с которой работаетм мы создаём обьект Image(в коде this.tempLoadImage), который загрузит картинку из сети(кстати таймаут выставить я забыл, вдруг у юзера коннект оборвётся...)
Как только картинка загрузится мы должны показать её юзеру, для этого отлавливаем событие onload.
Да.
Собтна ссылку parentImage мы и устанавливаем в ручную, дабы она потом была доступна из обработчика onload. Ссылка this в обработчике указывает не на элемент img, а на обьект Image, который загружал нашу картинку. Код по вкусу можно доработать, например опрос текущего статуса(загрузка, отображение). -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
||||
|
|||||
Иль |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 544 Регистрация: 3.3.2005 Где: Москва Репутация: нет Всего: 14 |
Просто супер, особенно когда немного понимаешь
![]()
Sardar, а что вообще бывает и конкретно здесь будет если
Я тут разбирался с setInterval и, ненароком, такое сделал ![]() ![]() Не помогло даже предупреждение ИЕ, что данный скрипт тормозит работу. А что, вот полез посетитиль какие не надо запросы отсылать на сервер, а ты ему: "Нате, отдохните". Да еще, для затравки, вывести типа: "Начинаем форматировать ваш системный диск" ![]() ![]() -------------------- Ты виндусятник?... А я да. ![]() |
||||
|
|||||
Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 16 Всего: 317 |
Нет ничего не будет, в этом и проблема. Юзеру не приятно видеть мессадж "Loading..." не подающий никаких признаков жизни. Если ставим таймаут на 1 минуту, то после этой паузы можно спросить у юзера, мол либо коннект либо сервак упал, попытатся снова или бросить всё ![]() -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
Иль |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 544 Регистрация: 3.3.2005 Где: Москва Репутация: нет Всего: 14 |
Sardar, вот ты юзаешь свойство complete. А ты учел в своем коде мерзкое отношение Гекоподобных к этому свойству, тестил ли свой код в Мозиле с несуществующими изображениями? Не вижу в скрипте обхода этого глюка.
В Геко так нельзя, они черезчур многозадачны и продвинуты (не в ту сторону). Если прописать не существующий адрес не существующей картинки уже complete=true. Вообще при создании объекта a=new Image() в этих браузерах сразу coplete=true. Ну разве, что если присвоить src пустое значение "". С createElement такая же ситуация Как быть? Хоть возник такой вопрос, еще раз скажу спасибо за труд и привиденный код, который когда-то сильно продвинул меня в понимании JS (... + позже, тк сегодня уже плюсовал ![]() Это сообщение отредактировал(а) Иль - 10.5.2005, 15:52 -------------------- Ты виндусятник?... А я да. ![]() |
|||
|
||||
Иль |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 544 Регистрация: 3.3.2005 Где: Москва Репутация: нет Всего: 14 |
Ребята, если кто будет тестить свойство complete, не забывайте после смены src ставить, например, пустой alert("") (для Геко с кавычками). Это сымитирует задержку интернета, иначе при смене src на src существующего изображения можно поймать старое значение complete (многозадачность - браузер тратит время на заказчу и прорисовку). Даже используя onload такое может быть (хотя с onload только ИЕ может так глюкануть)
Это сообщение отредактировал(а) Иль - 10.5.2005, 15:08 -------------------- Ты виндусятник?... А я да. ![]() |
|||
|
||||
Иль |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 544 Регистрация: 3.3.2005 Где: Москва Репутация: нет Всего: 14 |
В догонку.
Однако, что получается: 1. С замечательным событием onerror Gecko нам руки пообрубал (лень наверно кому-то реализовывать для людей, как в ИЕ) 2. complete тоже как фикция или заглушка реализован (чую корни проблемы из одного источника с onerror) И что получается! Надежда только на внимание составителя сайта? За что боролись, на то и напоролись. У меня, конечно, мало опыта в этом вопросе, поэтому надеюсь, что я ошибаюсь или чего не знаю. Это сообщение отредактировал(а) Иль - 10.5.2005, 14:40 -------------------- Ты виндусятник?... А я да. ![]() |
|||
|
||||
Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 16 Всего: 317 |
Да тестил, свойство работает правильно. Но ты прав, нужно "некоторое время", для того что бы оно обновилось после смены src. Что ты конкретно делаешь? Открой отдельный топик, выложи код или дай линк на страницу, посмотрим, подумаем. -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
Иль |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 544 Регистрация: 3.3.2005 Где: Москва Репутация: нет Всего: 14 |
Добавлю для завершонности темы из другого топика. Sardar заметил, что в Gecko все работает правильно и onerror и complete, но только если работать через сеть, а не тестить локально на своем ПК.
-------------------- Ты виндусятник?... А я да. ![]() |
|||
|
||||
Opik |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 1918 Регистрация: 6.10.2004 Где: Рига Репутация: нет Всего: 55 |
http://files.vingrad.ru/Sardar/ImageLoad.htm - Error 404
|
|||
|
||||
Иль |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 544 Регистрация: 3.3.2005 Где: Москва Репутация: нет Всего: 14 |
ну наверно места нехватает на сервере
![]() -------------------- Ты виндусятник?... А я да. ![]() |
|||
|
||||
![]() ![]() ![]() |
Здесь публикуют скрипты, которые уже проверены в обсуждениях других тем (при этом полезно поставить ссылки на все смежные обсуждения) или переносятся кем-либо из модераторов по просьбе участников, если видно, что в результате обсуждения темы был написан полезный или интересный скрипт. Третий возможный вариант - участник форума публикует скрипт, заведомо известный как полезный и эффективный, для, возможно, небольшой доработки и обсуждения. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | JavaScript: Наши скрипты | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |