Я стараюсь, чтобы получить высоту/ширину от некоторых фоновых изображений, но как получить эти значения в некоторых переменныеЗначение, возвращаемое из image.onload (функция() является 0 или не определен
var bgobj = jQuery(this); // assigning the object
var url = bgobj.css('background-image').replace(/url\(|\)$|"/ig, '');
var img = new Image();
img.src = url;
Вариант 1?: .
alert('img.width: ' + img.width); // alert: " img.width: 0 "
Возможно, изображение не загружается Так что я стараюсь OnLoad: вариант 2:
jQuery(bgimg).on('load', function() {
height = jQuery(bgimg).height();
//alert('height ' + height); //'480px' which is correct!
});
Невозможно получить выгоду для дальнейшего использования !? Поэтому я стараюсь обратного вызова: Вариант 3:
var imageSize = function(url, callback) {
var img = new Image();
img.onload = function(){
var response = {};
var img = new Image();
img.onload = function() {
var x = img.width;
var y = img.height;
var z = y/x;
response = {width:x,height:y};
if(callback) callback(response);
}
img.src = url;
}
img.onload();
}
var getSize = function(url, callback) {
imageSize(url, function(response) {
var dim = response;
})
callback(dim);
}
var h;
imageSize(img.src, function(response) {
h=response.height;
//alert(h); // 800px (OK))
})
//alert(h); //undefined
//alert(imageSize.height); //undefined
//alert(imageSize.h); //undefined
//alert(imageSize.response.h); //undefined
Все еще не способ получить значение в обычной переменной. Где я ошибся?
Ваша единственная проблема - неотъемлемый асинхронный характер этой проблемы. Браузер должен загрузить изображение, прежде чем вы сможете получить доступ к каким-либо его свойствам. Таким образом, вы не сможете получить размеры этого изображения в строго синхронизированном рабочем процессе. – Sirko