21.04.2012, 01:31
|
Новичок на форуме
|
|
Регистрация: 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, в нем размеры по нулям.
|
|
21.04.2012, 01:52
|
|
|
Регистрация: 10.07.2008
Сообщений: 3,873
|
|
visibility:hidden , вместо display:none . Методы width и height, атрибутов у вас в примере нет.
Последний раз редактировалось Octane, 21.04.2012 в 01:54.
|
|
22.04.2012, 11:13
|
Интересующийся
|
|
Регистрация: 15.03.2011
Сообщений: 11
|
|
Сообщение от Octane
|
visibility:hidden, вместо display:none.
|
Только есть один момент: место в общем потоке, зарезервированное под элемент, остаётся. Если это нежелательно, то position: absolute, либо "показывать" (display:none/block) картинку на момент замера и скрывать после. Это приемлемо, если общий код не тяжёлый - тогда юзер ничего не заметит.
|
|
22.04.2012, 11:39
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,588
|
|
>Это приемлемо, если общий код не тяжёлый - тогда юзер ничего не заметит.
Это неприемлемо никогда, ибо вызывает 2 лишних и бессмысленных перерисовки.
Обычно картинку просто уводят далеко за левый верхний угол, с помощью position: absolute.
Кстати большинство ситуаций, когда на ум приходит необходимость учитывать заранее неизвестный размер картинки, решается с помощью css без этого.
__________________
29375, 35
|
|
22.04.2012, 14:03
|
|
Аспирант
|
|
Регистрация: 05.10.2011
Сообщений: 85
|
|
а так тоже размеры не определены?
$(".picimg").width();
$(".picimg").height();
|
|
24.04.2012, 14:35
|
Профессор
|
|
Регистрация: 02.07.2010
Сообщений: 642
|
|
Я с данной проблемой боролся по всякому. Могу добавить еще, что размеры не будут выданы, пока картинка в принципе не загрузится. При отображении в одном месте последовательно нескольких картинок (что-то типа слайд-шоу) при больших размерах картинок, при медленном интернете возникают всякие неприятности. Если на время загрузки прятать картинку ("далеко за левый верхний угол"), то некоторое время пользователь не видит ничего - раздражает. Если не прятать, то пока грузится новая картинка - её размеры искажаются размерами от предыдущей картинки.
Чтобы побороть всё это я нашел пока один путь: сервер должен знать размеры картинки (хранить в базе данных) и при отсылке клиенту src новой картинки одновременно сообщать ее размеры. Тогда проблема нулевых размеров отпадает.
|
|
24.04.2012, 14:57
|
что-то знаю
|
|
Регистрация: 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";
|
|
24.04.2012, 15:21
|
Профессор
|
|
Регистрация: 02.07.2010
Сообщений: 642
|
|
Сообщение от devote
|
А чем такой вариант не угодил:
img.onload = function()...
|
Не угодил тем, что у Вас размеры картинки 20х20 px, а Вы попробуйте 1920х1080px (Full HD). При входе в интернет через GSM-модем фото грузится несколько секунд. Если на это время его прятать - плохо (люди не хотят тупо смотреть в черный экран и ждать, а хотят видеть с самого начала по ходу загрузки). Если размеры заранее не известны, то происходят искажения размеров. Кстати все браузеры в принципе при загрузке больших фото, превышающих размер экрана грузят их некрасиво. И только после полной загрузки производят масштабирование и центрирование. Попробуйте на практике - Вы всё это увидите сами.
|
|
24.04.2012, 16:11
|
что-то знаю
|
|
Регистрация: 24.05.2009
Сообщений: 5,176
|
|
Сообщение от Маэстро
|
Попробуйте на практике - Вы всё это увидите сами.
|
да я и так знаю как это работает.
Сообщение от Маэстро
|
И только после полной загрузки производят масштабирование и центрирование.
|
Если грузить картинку вне HTML страницы то да.. Если же грузиться вставленная через тег IMG то браузеры загружая картинку, читают в ее заголовках истинный размер картинки и уже выделяют после этого необходимую область под картинку, даже не загрузив ее до конца. Если же в теге IMG явно указан размер, то он так и остается, просто рисунок масштабируется под нужный размер.
|
|
24.04.2012, 16:20
|
Профессор
|
|
Регистрация: 02.07.2010
Сообщений: 642
|
|
Сообщение от devote
|
Если же в теге IMG явно указан размер, то он так и остается, просто рисунок масштабируется под нужный размер.
|
Вот именно! И картинка светится вся перекошенная. Особенно прикольно, когда предыдущее фото было формата "портрет", а следующее формата "альбом". А еще одна бяка вылезла в последних версиях Google Chrome и, по-моему уже и в Fire Fox: если прописать в img, тот же самый src, что был перед этим, то событие onload не срабатывает вообще. Соответственно нельзя произвести какие-то действия, которые были предусмотрены в обработчике.
|
|
|
|