![]() |
|
Модераторы: 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 |
ну наверно места нехватает на сервере
-------------------- Ты виндусятник?... А я да. |
|||
|
||||
| Aliance |
|
|||
![]() I ♥ <script> ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6418 Регистрация: 2.8.2004 Где: spb Репутация: 6 Всего: 137 |
Opik
Этот код, если мне не изменяет память, был написал до переезда винграда. Соответственно и файлы все пропали |
|||
|
||||
| Sardar |
|
||||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 16 Всего: 317 |
Нет, это Wowa так переезд на новые сервера осуществил, все файлы на форумском FTP теперь убились, увы много 404 по форуму гуляет Найду/напишу по новой, выложу. -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
||||
|
|||||
| Иль |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 544 Регистрация: 3.3.2005 Где: Москва Репутация: нет Всего: 14 |
-------------------- Ты виндусятник?... А я да. |
|||
|
||||
| Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 16 Всего: 317 |
Иль паисб, а то всё времени не было =) Только по примеру кнопка "Не существующая" должна грузить не существующую картинку P.S. Содержимое мессаджа в углу без глазных капель под линухом не прочесть... -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
| Иль |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 544 Регистрация: 3.3.2005 Где: Москва Репутация: нет Всего: 14 |
Каюсь, не вникал доконца. Исправлюсь. Я торопился и главный упор сделал на то, что уж больно мне твой старый аватар нравится
Добавлено: Ну вот, все исправил Это сообщение отредактировал(а) Иль - 22.6.2005, 23:36 -------------------- Ты виндусятник?... А я да. |
|||
|
||||
| Иль |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 544 Регистрация: 3.3.2005 Где: Москва Репутация: нет Всего: 14 |
Ради эксперимента протестил, что быстрее: вариант со сменой ноды на уже готовую ноду по onload или как у Sardar - сменой SRC. Всетаки современные браузеры смену SRC делают чуточку быстрее. На 1000 итераций имеем в среднем в FF 800 на 550, в Mozilla 550 на 350, а в ИЕ 425 на 375мс. Впринципе разница небольшая и если для задач надо, то можно смело использовать DOM вместо SRC
-------------------- Ты виндусятник?... А я да. |
|||
|
||||
| Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 16 Всего: 317 |
А зачем менять картинку? Естественно будет дольше, новый обьект создаёться, если только в бродилке каких оптимизаций особых нет.
Аттрибут src это HTML DOM 1. -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
| Иль |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 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. |