У меня есть таблица, которая динамически создается с использованием DIV. В каждой строке таблицы по два изображения. Я хочу установить высоту для div (который представляет конкретную строку) на высоту изображения, которая больше двух изображений, отображаемых в этой конкретной строке. Отображаемые изображения всегда будут меняться, и они получены с внешнего сервера.
Как мне установить высоту для моего div, чтобы я мог умещать изображения?
здесь нет кода на стороне сервера. это чистый javascript-css play






Предварительно загрузите их в объекты изображений javascript, а затем просто укажите высоту и ширину.
Может потребоваться какая-то умная чертовщина, чтобы работать во всех браузерах ...
function getSize(imgSrc){
var aImg = new Image();
aImg.src = imgSrc;
aHeight = newImg.height;
aWidth = newImg.width;
}
как связать эти объекты изображения с соответствующими тегами div, которые должны их отображать?
ширина и высота равны 0 сразу после создания изображения. Вам нужно дождаться, пока изображение запустит событие загрузки, прежде чем проверять его размер.
Вы можете:
После загрузки изображения выполните:
document.getElementById ("myDiv"). height = document.getElementById ("myImage"). height
в таблице много строк. Разве это не ухудшит внешний вид пользовательского интерфейса?
Нам понадобится немного больше информации, чтобы быть очень полезным. Вы можете получить высоту и ширину изображения после загрузки страницы с помощью Javascript (Информация), а затем вы можете изменить высоту div после загрузки. В противном случае вам действительно не повезло, поскольку в самом HTML ничего нет.
Если вы используете PHP, есть getimagesize (), который вы можете использовать, если вы создаете сайт динамически с помощью PHP. Есть аналогичные функции для других языков, но нам понадобится немного больше информации.
Если вы пытаетесь динамически изменить размер пары div в строке внутри таблицы, возможно, вам лучше использовать таблицу html вместо этого и иметь каждое изображение в теге td. Это приведет к изменению размера тега tr для изображения в каждой ячейке.
Если вы хотите, чтобы браузер создавал макет на основе высоты изображения, прежде чем он получит изображение, вам необходимо отправить эту высоту куда-нибудь в браузер. Для этого потребуется что-то на стороне сервера. Самым быстрым вариантом было бы вставить его напрямую в HTML. Медленнее, но более элегантно было бы получать его изображение за изображением с помощью операторов <script src =>, которые получают инструкции из специального бита cgi, генерирующего javascript. (Разница в скорости возникает из-за сетевых обходов.)
Если вы хотите изменить размер после получения данных, это намного проще. Либо установите обработчик загрузки на изображения, либо вставьте их в обычную dom (например, в настоящую таблицу, хотя вы можете сделать это с помощью div и css) и позвольте механизму компоновки выполнять эту работу.
На этот вопрос было дано несколько ответов, и вы задали дополнительный вопрос: «Не ухудшит ли это пользовательский интерфейс?»
Ответ на этот вопрос - да. Лучшее, что вы можете сделать в большинстве случаев, - это установить высоту вашего div так, чтобы она выглядела хорошо, а затем масштабировать изображения до нужного размера. Это ускорит рендеринг, а конечный продукт будет выглядеть лучше и профессиональнее.
Но это только мое личное мнение. У меня нет эмпирических данных, подтверждающих это.
this.img = new Image();
this.img.src = url;
alert(this.img.width);
дает ширину, в то время как
var img = new Image();
img.src = url;
alert(img.width);
не ..
не знаю почему.
Спасибо! Этот ответ найти на удивление сложно. На самом деле я использовал второй, и он отлично работает.
Насколько я знаю, причина в том, что изображение еще не обязательно завершило загрузку (я полагаю, оно загружается асинхронно).
Вы используете код на стороне сервера? В таком случае следует указать язык / настройки.