Я пробовал что-то вроде этого:
var Height = $(this).naturalHeight;
Но это не сработает. Есть ли способ сделать это
greez
Я пробовал что-то вроде этого:
var Height = $(this).naturalHeight;
Но это не сработает. Есть ли способ сделать это
greez
$this.css('height', 'auto');
var height = $this.height();
Я использую собственные атрибуты javascript
.naturalWidth/.naturalHeight
В объекте jQuery я использую
var width = $(this).get(0).naturalWidth;
var height = $(this).get(0).naturalHeight;
или
var width = $("selector").get(0).naturalWidth;
var height = $("selector").get(0).naturalHeight;
если не выбран объект jQuery.
С помощью get (0) в объекте jQuery вы можете получить доступ к связанному DOM-элементу. На встроенном элементе DOM вы можете работать с собственным кодом JavaScript (здесь доступен атрибут nativ javascript.naturalWidth)
Мне кажется, что принятое решение изменяет внешний вид объекта. Иногда jQuery слишком полезна, и вы должны сказать, чтобы он ушел с вашего пути. Если вы хотите использовать naturalWidth или naturalHeight, просто используйте тот, который уже существует, путем преобразования объекта jQuery в ссылку на собственный элемент браузера.
var Height = document.getElementById($(this).attr("id")).naturalHeight;
Один из способов получить размеры изображения - динамически загружать копию изображения с помощью javascript и получать его размеры:
// preload the image
var height, width = '';
var img = new Image();
var imgSrc = '/path/to/image.jpg';
$(img).load(function () {
alert('height: ' + img.height);
alert('width: ' + img.width);
// garbage collect img
delete img;
}).error(function () {
// image couldnt be loaded
alert('An error occurred and your image could not be loaded. Please try again.');
}).attr({ src: imgSrc });
Вот пример функции jQuery, которая работает с более старыми версиями IE даже для больших изображений.
/*
* NaturalWith calculation function. It has to be async, because sometimes(e.g. for IE) it needs to wait for already cached image to load.
* @param onNaturalWidthDefined callback(img) to be notified when naturalWidth is determined.
*/
jQuery.fn.calculateNaturalWidth = function(onNaturalWidthDefined) {
var img = this[0];
var naturalWidth = img.naturalWidth;
if (naturalWidth) {
onNaturalWidthDefined(img);
} else { //No naturalWidth attribute in IE<9 - calculate it manually.
var newImg = new Image();
newImg.src = img.src;
//Wait for image to load
if (newImg.complete) {
img.naturalWidth = newImg.width;
onNaturalWidthDefined(img);
} else {
$(newImg).load(function() {img.naturalWidth=newImg.width; onNaturalWidthDefined(img)});
}
}
};
Использование прост:
$(img).calculateNaturalWidth(function(img) { alert(img.naturalWidth)});
Лучшее, что вы можете сделать, это скрыть изображение без установки ширины и высоты и использовать источник изображения для этого изображения в качестве исходного изображения. Затем вычислите размер этого скрытого изображения.
Или вы можете рассчитать физическое измерение на стороне сервера и передать это скрытому элементу на странице и получить размер из этого значения скрытого элемента.
Просто попробовал
var width = $("img", this).css('width', 'auto').width();
var height= $("img", this).css('height', 'auto').height();
Является в основном вычислением для naturalWidth
и naturalHeight
в любом случае
Источник ЗДЕСЬ
Вот небольшой плагин jQuery (любая версия), который добавляет два метода: naturalWidth() и naturalHeight(). Он использует ветвление, чтобы определить, поддерживаются ли naturalWidth и naturalHeight браузером. Если поддерживается, метод просто становится геттером для свойства naturalWidth или naturalHeight. Если этот метод не поддерживается, метод создает новый элемент нестационарного изображения и возвращает фактическую ширину и высоту этого элемента.
// adds .naturalWidth() and .naturalHeight() methods to jQuery
// for retreaving a normalized naturalWidth and naturalHeight.
(function($){
var
props = ['Width', 'Height'],
prop;
while (prop = props.pop()) {
(function (natural, prop) {
$.fn[natural] = (natural in new Image()) ?
function () {
return this[0][natural];
} :
function () {
var
node = this[0],
img,
value;
if (node.tagName.toLowerCase() === 'img') {
img = new Image();
img.src = node.src,
value = img[prop];
}
return value;
};
}('natural' + prop, prop.toLowerCase()));
}
}(jQuery));
// Example usage:
var
nWidth = $('img#example').naturalWidth(),
nHeight = $('img#example').naturalHeight();