Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 21.04.2012, 01:31
Новичок на форуме
Отправить личное сообщение для ingwarr Посмотреть профиль Найти все сообщения от ingwarr
 
Регистрация: 09.03.2012
Сообщений: 4

В IE не извлекаются размеры скрытой картинки
Доброго времени суток.

Как можно извлечь в IE размеры скрытой картинки?

Например есть картинка
<img class="picimg" src="'image/test.jpeg" style="display:none;" />

надо узнать её размер и исходя из этого, отцентрировать относительно размера экрана, извлекал так:
var height = $(".picimg").attr("height");
var width = $(".picimg").attr("width");


во всех нормально, кроме IE, в нем размеры по нулям.
Ответить с цитированием
  #2 (permalink)  
Старый 21.04.2012, 01:52
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

visibility:hidden, вместо display:none. Методы width и height, атрибутов у вас в примере нет.

Последний раз редактировалось Octane, 21.04.2012 в 01:54.
Ответить с цитированием
  #3 (permalink)  
Старый 22.04.2012, 11:13
Интересующийся
Отправить личное сообщение для SindBad Посмотреть профиль Найти все сообщения от SindBad
 
Регистрация: 15.03.2011
Сообщений: 11

Сообщение от Octane
visibility:hidden, вместо display:none.
Только есть один момент: место в общем потоке, зарезервированное под элемент, остаётся. Если это нежелательно, то position: absolute, либо "показывать" (display:none/block) картинку на момент замера и скрывать после. Это приемлемо, если общий код не тяжёлый - тогда юзер ничего не заметит.
Ответить с цитированием
  #4 (permalink)  
Старый 22.04.2012, 11:39
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,493

>Это приемлемо, если общий код не тяжёлый - тогда юзер ничего не заметит.
Это неприемлемо никогда, ибо вызывает 2 лишних и бессмысленных перерисовки.
Обычно картинку просто уводят далеко за левый верхний угол, с помощью position: absolute.

Кстати большинство ситуаций, когда на ум приходит необходимость учитывать заранее неизвестный размер картинки, решается с помощью css без этого.
__________________
29375, 35
Ответить с цитированием
  #5 (permalink)  
Старый 22.04.2012, 14:03
Аватар для razerxxx
Аспирант
Отправить личное сообщение для razerxxx Посмотреть профиль Найти все сообщения от razerxxx
 
Регистрация: 05.10.2011
Сообщений: 85

а так тоже размеры не определены?
$(".picimg").width();
$(".picimg").height();
Ответить с цитированием
  #6 (permalink)  
Старый 24.04.2012, 14:35
Профессор
Отправить личное сообщение для Маэстро Посмотреть профиль Найти все сообщения от Маэстро
 
Регистрация: 02.07.2010
Сообщений: 642

Я с данной проблемой боролся по всякому. Могу добавить еще, что размеры не будут выданы, пока картинка в принципе не загрузится. При отображении в одном месте последовательно нескольких картинок (что-то типа слайд-шоу) при больших размерах картинок, при медленном интернете возникают всякие неприятности. Если на время загрузки прятать картинку ("далеко за левый верхний угол"), то некоторое время пользователь не видит ничего - раздражает. Если не прятать, то пока грузится новая картинка - её размеры искажаются размерами от предыдущей картинки.
Чтобы побороть всё это я нашел пока один путь: сервер должен знать размеры картинки (хранить в базе данных) и при отсылке клиенту src новой картинки одновременно сообщать ее размеры. Тогда проблема нулевых размеров отпадает.
Ответить с цитированием
  #7 (permalink)  
Старый 24.04.2012, 14:57
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от Маэстро
сервер должен знать размеры картинки (хранить в базе данных) и при отсылке клиенту src новой картинки одновременно сообщать ее размеры. Тогда проблема нулевых размеров отпадает.
А чем такой вариант не угодил:
var img = new Image();
img.onload = function() {
    alert( [ "width: " + this.width, "height: " + this.height ] );
}
img.src = "http://javascript.ru/forum/images/smilies/smile.gif";
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #8 (permalink)  
Старый 24.04.2012, 15:21
Профессор
Отправить личное сообщение для Маэстро Посмотреть профиль Найти все сообщения от Маэстро
 
Регистрация: 02.07.2010
Сообщений: 642

Сообщение от devote Посмотреть сообщение
А чем такой вариант не угодил:
img.onload = function()...
Не угодил тем, что у Вас размеры картинки 20х20 px, а Вы попробуйте 1920х1080px (Full HD). При входе в интернет через GSM-модем фото грузится несколько секунд. Если на это время его прятать - плохо (люди не хотят тупо смотреть в черный экран и ждать, а хотят видеть с самого начала по ходу загрузки). Если размеры заранее не известны, то происходят искажения размеров. Кстати все браузеры в принципе при загрузке больших фото, превышающих размер экрана грузят их некрасиво. И только после полной загрузки производят масштабирование и центрирование. Попробуйте на практике - Вы всё это увидите сами.
Ответить с цитированием
  #9 (permalink)  
Старый 24.04.2012, 16:11
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от Маэстро
Попробуйте на практике - Вы всё это увидите сами.
да я и так знаю как это работает.
Сообщение от Маэстро
И только после полной загрузки производят масштабирование и центрирование.
Если грузить картинку вне HTML страницы то да.. Если же грузиться вставленная через тег IMG то браузеры загружая картинку, читают в ее заголовках истинный размер картинки и уже выделяют после этого необходимую область под картинку, даже не загрузив ее до конца. Если же в теге IMG явно указан размер, то он так и остается, просто рисунок масштабируется под нужный размер.
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #10 (permalink)  
Старый 24.04.2012, 16:20
Профессор
Отправить личное сообщение для Маэстро Посмотреть профиль Найти все сообщения от Маэстро
 
Регистрация: 02.07.2010
Сообщений: 642

Сообщение от devote Посмотреть сообщение
Если же в теге IMG явно указан размер, то он так и остается, просто рисунок масштабируется под нужный размер.
Вот именно! И картинка светится вся перекошенная. Особенно прикольно, когда предыдущее фото было формата "портрет", а следующее формата "альбом". А еще одна бяка вылезла в последних версиях Google Chrome и, по-моему уже и в Fire Fox: если прописать в img, тот же самый src, что был перед этим, то событие onload не срабатывает вообще. Соответственно нельзя произвести какие-то действия, которые были предусмотрены в обработчике.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Размеры картинки JetPak jQuery 2 30.01.2012 14:22
Изменение размеров картинки через скрипт SLV Общие вопросы Javascript 4 27.12.2010 11:40
Как проиндексировать картинки HTML код которых генерируется на JS greatilya Оффтопик 9 22.09.2010 07:42
Получение координат от картинки EmDmAl Events/DOM/Window 4 08.11.2009 14:34
Как изменить размер картинки? Mihail Общие вопросы Javascript 1 25.10.2009 13:42