не могу определить размеры img
Добрый день! Подскажите, плз, кто знает.
Почему-то img_width и img_height определяются как 0. Они определяются правильно только в случае, если задать размеры рисунку в CSS. Хотелось бы знать почему...:help: $(document).ready(function(){ $('.product-image-large').each(function() { var MAX_WIDTH = 120; var MAX_HEIGHT = 90; var img_width = $(this).width(); var img_height = $(this).height(); var ratio; if(img_width<MAX_WIDTH && img_height<MAX_HEIGHT){ratio=1;} else if(img_width>img_height){ ratio=MAX_WIDTH/img_width;} else {ratio=MAX_HEIGHT/img_height;} img_width=img_width*ratio; img_height=img_height*ratio; }); $('.product-image-large').css({'width': img_width, 'height': img_height}); });// |
Потому что ширина/высота картинки определяются (нормально) только после её полной загрузки.
<div id="cont"><div> <script> cont= document.getElementById("cont"); img= document.createElement("img"); img.onload=function() {alert(img.offsetWidth+ "x" +img.offsetHeight)}; //после загрузки img.src= "http://www.naturewallpaper.net/wallpapers/hawaiian_rainbow___id_41280-1400x1050.jpg"; cont.appendChild(img); alert(img.offsetWidth+ "x" +img.offsetHeight); //до загрузки </script> |
Спасибо за ответ. напрашивается вопрос - а можно ли решить эту проблему средствами jQuery или поможет только JS.
Спасибо. |
В jquery eсть событие load, нет?
Признаться, не силён в jquery, поэтому не могу сказать точно. |
Большое спасибо!
Действительно через load все работает $('img.product-image-large').load(function(){ img_resize(); }); function img_resize() { $('.product-image-large').each(function() { $(this).width(''); $(this).height(''); var MAX_WIDTH = 220; var MAX_HEIGHT = 180; var img_width = $(this).width(); var img_height = $(this).height(); var ratio; if(img_width<=MAX_WIDTH && img_height<=MAX_HEIGHT){ratio=1;} else if(img_width>img_height){ ratio=MAX_WIDTH/img_width;} else {ratio=MAX_HEIGHT/img_height;} //alert(ratio); //if (ratio>1){ratio=1;} $(this).css("width", img_width*ratio); // Set new width $(this).css("height", img_height*ratio); // Scale height based on }); }//img_resize() |
dopelher
не оптимально получается, функци img_resize будет вызываться столько раз, сколько картинок в документе и проделывать одну и ту же работу, может лучше как то так? $('img.product-image-large').load(function(){ var MAX_WIDTH = 220; var MAX_HEIGHT = 180; var img_width = $(this).width(); var img_height = $(this).height(); var ratio; if(img_width<=MAX_WIDTH && img_height<=MAX_HEIGHT){ ratio=1; } else if(img_width>img_height){ ratio=MAX_WIDTH/img_width; } else { ratio=MAX_HEIGHT/img_height; } //alert(ratio); //if (ratio>1){ratio=1;} $(this).css("width", img_width*ratio); // Set new width $(this).css("height", img_height*ratio); // Scale height based on }); |
Да можно и так, у меня просто большая картинка одна, у которой меняется src при наведении на маленькие картинки, поэтому удобней каждый раз пересчитывать пропорции через функцию.
|
Часовой пояс GMT +3, время: 21:32. |