Я использую вызов Json для получения списка адресов изображений, а затем добавляю их по отдельности в такой div. К сожалению, размер изображения не является частью информации Json.
Знали ли вы, гении JQuery, код, который безупречно и динамически добавлял бы истинные Width и Height к каждому img элементу в контейнере сразу после визуализации каждого отдельного элемента?
Я подумал, может быть, код может сделать проверку ширины изображения width > 0, чтобы оценить, когда изображение действительно было отрисовано, а затем запустить. Но я бы не знал, как это сделать и заставить работать стабильно. Как лучше всего это сделать?
Обновить. Как указано в ответах, добавление элементов Width или Height к элементам - обычное дело. Проблема здесь в том, чтобы написать код, который будет знать когда это делать. И оцените это условие для каждого изображения, а не для страницы в целом.
Обновление 2 Я нашел очень хороший рабочий ответ здесь
Тупой вопрос: зачем вам устанавливать атрибуты ширины и высоты? RoToRa 23.04.2010
ага, почему? ... вам не нужно .. потому что, если вам нужны размеры позже, вы можете .width() или .height() это ... я потерялся здесь? Reigel 23.04.2010
@RoToRa: Мне это нужно, так как после этого я выполню некоторые манипуляции с DOM над изображениями, которые требуют знаний о высоте и ширине изображения. @Reigel, да, конечно, и все нижеприведенные ответы указывают на это, но вопрос не об этом. Mohammad 23.04.2010
Только что нашел это решение: stackoverflow.com/questions / 2392410 / balu 23.04.2010
@codethief: это, вероятно, ответит на мой вопрос .. Я изучаю это, спасибо !! Mohammad 23.04.2010
load даже запускается, когда все изображения и внешние ресурсы загружены на страницу вместе с DOM, поэтому вы можете использовать это и использовать методы width() и height() для получения размеров изображений. Пример:
$(window).load(function(){
// your code to get dimensions, manipulate images, etc
})
Используйте $ (document) .ready (), чтобы дождаться полной загрузки изображений.
готов (обработчик)
обработчик - функция, выполняемая после того, как DOM будет готов.
Хотя JavaScript предоставляет событие загрузки для выполнения кода при визуализации страницы, это событие не запускается, пока все ресурсы, такие как изображения, не будут полностью получены.
Решение Рейгеля, теперь с использованием $ (document) .ready ():
[РЕДАКТИРОВАТЬ]: Я только что понял, что это может не сработать, когда вы вставляете изображения после загрузки страницы, но я думаю, что стоит попробовать:
$('#container img').each(function(){
var pic_real_width;
var pic_real_height;
$(img).load(function() {
// Remove attributes in case img-element has set width and height
$(this).removeAttr("width")
.removeAttr("height")
.css({ width: "", height: "" }); // Remove css dimensions as well
pic_real_width = this.width;
pic_real_height = this.height;
});
var src = img.src;
img.src = "";
img.src = src; // Triggers onload if image is cached
});
Загрузите изображения через AJAX в фоновом режиме и надейтесь, что браузер кэширует их, чтобы они были мгновенно там, когда вы добавляете элементы в свой div (и вы можете сразу же получить width () и height ()). ;)
Если у вас есть доступ к веб-серверу, который отправляет эти изображения: Убедитесь, что вы установили соответствующие заголовки кеша.
[EDIT]: вместо того, чтобы полагаться на кеш, вы также можете поместить данные изображения, который вы только что загрузили через AJAX прямо в исходный код. К сожалению, в IE это явно не работает.
<img src="data:<mimetype>;base64,<data>" />
Для кодирования данных используйте функцию, подобную этой.