| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > JavaScript: Общие вопросы > Динамическое создание image |
| Автор: Atlete 5.11.2009, 11:54 | ||||
| Вот столкнулся со следующей проблемой. Написал не сложный tooltip с картинками. Создаю картинку, добавляю на страницу. Все это работает. Но при создании необходимо получить размер картинки (ширину, высоту). Если картинка больше максимального размера изменить ей высоту и ширину до максимальной. Код примерно такой:
Вот тут получается что высота и ширина равна нулю. Пробовал получать ширину и высоту следующим образом:
Результат тот-же. Есть ли возможность получить реальную высоту и ширину создаваемой так картинки. Возможно необходимо загрузить все нужные картинки в скрытом div'е например, а потом уже при создании использовать их. Это еще не пробовал. У кого есть еще какие мысли? Что я делаю не так? |
| Автор: bars80080 5.11.2009, 12:00 |
| может она ещё не загрузилась? вообще, картинки привычнее создавать var img = new Image(); проверить состояние загрузки, вроде через img.onload = function() {}; можно |
| Автор: Atlete 5.11.2009, 12:06 |
| Похоже это оно. Я как то совсем забыл про этот метод. Думаю теперь все будет работать правильно. Спасибо. |
| Автор: IDVsbruck 5.11.2009, 12:56 |
| И еще кроме как createElement или new Image надо поместить созданный элемент в ДОМ. Пока он не помещен, его визуальные стили не посмотришь. |
| Автор: youri 6.11.2009, 12:35 |
| зато width и height посмотришь. А src лучше назначать после назначения onload |
| Автор: Atlete 6.11.2009, 12:46 |
| Если src назначать в onload то получается размер картинки тоже только после выполнения onload можно узнать? Я сделал так. src назначил до onload, потом в onload уже беру все нужные параметры. До тех пор пока картинка загружается отображаю пользователю сообщение об этом. |
| Автор: Atlete 6.11.2009, 17:23 | ||
| youri прошу прощения сильно. Недосмотрел Перенес присвоение присвоения src после установления onload. Но возникла интересная (неприятная) ситуация. В ИЕ6 и Opeara 10 при первом выполнении функции onload вызывается и все отрабатывает как положено. Но при повторном вызове функции onload не срабатывает. Проверял при помощи такой строки:
Как можно заставить нормально отрабатывать метод onload при повторном вызове функции? Возможно что то делаю не так. |
| Автор: bars80080 6.11.2009, 18:48 |
| по-моему, у оперы насчёт загрузки изображений был глюк. и здесь кто-то выкладывал решение его |
| Автор: youri 6.11.2009, 22:10 |
| выложили минимальный неработающий пример. Я как раз это проверял (по идее), когда отвечал. У меня работало в любом порядке, но src логичнее назначать после onload, чтобы всегда срабатывало |
| Автор: Atlete 9.11.2009, 10:36 | ||
| К сожалению не помогло даже изменения место положения присвоения src. Вот полный код функции:
Возможно где то туплю. P.S. не судите строго знаю что некоторые вещи сделаны топорно |
| Автор: Atlete 9.11.2009, 11:19 | ||||||
| Проблему решил. Первое:
ну и немного подправил javascript: было:
стало:
Возможно кому то пригодится и такая реализация. |
| Автор: youri 9.11.2009, 16:05 |
| ты б может стили в css вынес... да и вообще, разбил бы эту функцию на меньшие (; а ты что фотографии с помощью php отдаешь? И значит теперь фотографии не будут никогда кешироваться? |
| Автор: Atlete 9.11.2009, 22:45 |
| Это скриншоты. Я их не отдаю с помощью php. Они лежать в определенной папке. Но кешироваться они не будут. Насчет модернизации скрипта, то можно кроме выноса стилей css еще и все остальное переделать на более правильный вид. Возможно на досуге и оптимизирую. Из-за кеширования и не работал метод onload. Запретил кеширование и все заработало. |
| Автор: youri 10.11.2009, 16:16 | ||||||||
а (: т.е. ты добавил заголовки к основной страничке и думаешь, что фотографии кэшироваться не будут? Тогда это решение очень похоже на "Переставил компьютер в другую комнату. Всем спасибо. Тему можно закрывать". за счет чего?
У меня все работает и в ie6 и в opera 10, при том что фотографии достаются из кэша. Попробуй простейшую страничку
и скажи, какие заголовки возвращает сервер |