2012-03-20 2 views
1

У меня есть очень простой код, который раздражающе работал и для жизни меня я не могу понять, почему он теперь неудачу:Получение ширины и высоты изображения с JQuery

function imageSize(img){ 
    var theImage = new Image(); 
    theImage.src = img.attr('src'); 
    var imgwidth = theImage.width; 
    var imgheight = theImage.height; 

    alert(imgwidth+'-'+imgheight); 
} 

«IMG» переменная существо передается в объект IMG, полученный из:

jQuery('img') 
.each(function(){ 
    var imgsrc = jQuery(this); 
    imageSize(imgsrc); 
}); 
+0

Ну, что именно представляет собой проблема? Выглядит хорошо для меня. Кроме того, почему вы используете полномасштабное слово «jQuery»? Проблемы совместимости? Почему бы вам просто не использовать «$»? –

+1

Не стоит забывать, что если изображение не будет полностью загружено при запуске этого кода, ширина и высота будут возвращены как ноль или, возможно, какое-то другое неправильное значение. – Blazemonger

+0

Обнаружение точно, когда изображение полностью загружено, удивительно сложно, так как событие '.load' не срабатывает, если изображение вытаскивается из кеша. См. [Этот вопрос] (http://stackoverflow.com/q/3554185/901048) для решения этой проблемы. – Blazemonger

ответ

2

Возможно, изображение еще не загружено. Итак, попробуйте (непроверенные):

function imageSize(img){ 
    var theImage = new Image(); 
    $(theImage).load(function() { 
    var imgwidth = this.width; 
    var imgheight = this.height; 

    alert(imgwidth+'-'+imgheight); 
    }); 
    theImage.src = img.attr('src'); 
} 
+0

блестящее спасибо – xtremetom

2

Ok - предыдущий ответ я дал недействителен, когда я испытал его на jsFiddle - Я создал это, который делает то, что вы хотите, хотя? Вам нужна , чтобы иметь деталь «нового изображения()»? http://jsfiddle.net/R89Qr/3/ - дал изображения некоторые жестко закодированные размеры ...

я немного изменил свой код, так что он делает это:

function imageSize(img){ 
    var theImage = new Image(); // ignoring this part when checking the image width/height 
    theImage.src = img.attr('src'); 
    var imgwidth = $(img).width(); 
    var imgheight = $(img).height(); 

    alert(imgwidth+'-'+imgheight); 
} 

$('img').each(function(){ 
    var imgsrc = jQuery(this); 
    imageSize(imgsrc); 
}); 
+1

Это было бы правдой, если 'theImage' был объектом jQuery. – Blazemonger

+0

Да - v.true, я внес некоторые изменения и добавил скрипку, чтобы она работала. – SpaceBison

+0

Вы лаете не то дерево. Не-jQuery JavaScript [объект изображения] (http://www.w3schools.com/jsref/dom_obj_image.asp) имеет свойства ширины и высоты, которые должны были быть извлечены в исходном образце кода - если изображение было полностью загружено на время выполнения кода. – Blazemonger

1

Вы должны ждать, пока будет загружен ваш образ, а затем получить доступ к его размеры:

function imageSize(img){ 
    var theImage = new Image(); 
    theImage.onload = function(){ 
    var imgwidth = theImage.width; 
    var imgheight = theImage.height; 

    alert(imgwidth+'-'+imgheight); 
    } 
    theImage.src = img.attr('src'); 

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