2015-10-27 5 views
0

Это должно быть легко, но это не так. Мне просто нужна высота изображения:Получить высоту изображения

<div id="map"> 
    <img src="myimage.jpg"> 
</div> 
$("#map img").height(); // returns 0 
+0

Добавить код _complete_, когда вы пытаетесь получить высоту изображения – Tushar

+6

Возможный дубликат http://stackoverflow.com/questions/16084374/jquery-width-and-height-return-0-for-img-element –

+1

Возможный дубликат [Как получить размер изображения (высота и ширина) с помощью JavaScript?] (Http://stackoverflow.com/questions/623172/how-to-get-image-size-height-width-using-javascript) – Wanderer

ответ

2

Используйте .clientHeight (чистый JavaScript):

https://jsfiddle.net/ryanpcmcquen/v6yz8t3u/

console.log(document.querySelector('img').clientHeight);
<img src="//makelin.us/100/100" />

Читайте на него здесь: https://developer.mozilla.org/en-US/docs/Web/API/Element/clientHeight

Обратите внимание, что это даст вам высоту по мере того, как изображение появится на странице, на нее может повлиять CSS.

Примечание: Для того, чтобы узнать реальную высоту изображения, используйте .naturalHeight.
Большая статья здесь:https://davidwalsh.name/get-image-dimensions

Чтобы убедиться, что это работает после загрузки изображения, сделайте следующее:

window.addEventListener('load', function() { 
    console.log(document.querySelector('img').clientHeight); 
}); 
+0

Рассмотрите этот ответ: http://stackoverflow.com/a/623174/3681882 По вашему мнению, это возвращает высоту изображения _actual_ или высоту _rendered_ ? – CrakC

+1

@CrakC, спасибо за пинг. Это высота рендеринга, я добавил «.naturalHeight». – ryanpcmcquen

+0

Проблема в том, что размеры изображения еще не загружены, см. Мой ответ ниже. – turbopipp

0

Вы можете сослаться следующий пример, чтобы получить высоту

имидж-
<div id="map"> 
    <img id="img_id" src="http://www.clickerzoneuk.co.uk/cz/wp-content/uploads/2010/10/PuppySmall.jpg" > 
</div> 

напишите следующий код в js файле

var height = document.getElementById("img_id").clientHeight; 

alert(height); 

проверка пример с использованием следующей ссылка-

http://jsfiddle.net/v60mut3L/1/

+1

'.height' устарел: https: //developer.mozilla.org/en-US/docs/Web/API/Document/height – ryanpcmcquen

+0

Если я console.log объекта, есть свойство 'height'. Это правда? –

1

Проблема в том, что высота или ширина еще не рассчитаны, слушать загрузки изображения с .on("load", handler)

$("#map img").on("load", function(){ 
 
    var height = $(this).height(); 
 
    $('#output').html('height=' + height); 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.1/jquery.min.js"></script> 
 
<div id="map"> 
 
    <img src="http://placehold.it/400x40"> 
 
</div> 
 
<div id="output"></div>

+0

Наверное, правда, но уже отправлено примерно на полчаса раньше в комментариях. Кстати, 'load()', используемый таким образом, устарел некоторое время. Это правильная ссылка: http://api.jquery.com/load-event/. – Shikkediel

+0

Кажется, что с 1,8, вы правы. Но заменить «.on (« load », handler)» должно быть хорошо, не так ли? – turbopipp

+1

В принципе, да, но я думаю, что это немного больше, чем это. Если изображение было кэшировано, событие загрузки не будет срабатывать - и в этом случае также не будет расчет высоты. Таким образом, более широкий подход может состоять в том, чтобы прослушать событие onload (window) onload (которое всегда будет правильным) или выполнить проверку заранее, используя '.complete', который является индикатором уже загруженного изображения. Но этот последний бит просто понадобился бы, если бы вы хотели сэкономить время и могли бы скомпрометировать вещи. Принятый ответ в ссылке, которая была отмечена в комментариях, на самом деле не так корректна. – Shikkediel

-1

Это сработало для меня:

$(window).load(function() { 

    var artLists = []; 
    $("ul.articles").each(function (index) { 
     var imageHts = []; 
     $("li img", $(this)).each(function() { 
      imageHts.push($(this)[0].height); 
     }) 
     artLists.push(imageHts); 
    }) 

}); 
Смежные вопросы