我需要一个函数,它将URL
作为对某些image
的argument
,并同步returns the resolution
。我希望该功能在检索图像时简单地挂起。
大致如下:
function getImageDimensions(imageData) {
$("body").append("<img id='hiddenImage' src='" + imageData />"');
/* Wait until image is loaded */
var width = $('#hiddenImage').width();
var height = $('#hiddenImage').height();
$('#hiddenImage').remove();
return width;
}
编辑我完全想念这个。您只需将代码移动到$img.on('load', function() {...}
内即可,如下所示。
function getImageDimensions(imageData) {
var $img = $(`<img id='hiddenImage' src='${imageData}' />`);
$img.on('load', function() {
/* Wait until image is loaded */
var width = $('#hiddenImage').width();
var height = $('#hiddenImage').height();
$('#hiddenImage').remove();
alert('width = ' + width);
console.log(width);
});
$("body").append($img);
}
getImageDimensions(`https://i.stack.imgur.com/L6RvS.png?s=48&g=1`);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.0.2/jquery.min.js"></script>
或者,与其尝试使其同步,不如尝试使其async
。将函数更新为async
返回Promise
,并在img
loaded
时resolve
它。
从另一个async
函数调用getImageDimensions
并使用下面的await getImageDimensions
我已经用test
完成了。
async function getImageDimensions(imageData) {
return new Promise((resolve) => {
var $img = $(`<img id='hiddenImage' src='${imageData}' />`);
$img.on('load', function() {
/* Wait until image is loaded */
var width = $('#hiddenImage').width();
var height = $('#hiddenImage').height();
$('#hiddenImage').remove();
alert('width = ' + width);
resolve(width);
});
$("body").append($img);
});
}
async function test() {
let a = await getImageDimensions(`https://i.stack.imgur.com/L6RvS.png?s=48&g=1`);
console.log(a);
}
test();
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.0.2/jquery.min.js"></script>
或者,您可以将Promise
与then
一起使用并从onload
resolve
它,之后将从then
调用callback
函数。因此,它将与synchronous
代码类似。您可以编写在then
中加载img
后应完成的代码。
function getImageDimensions(imageData) {
new Promise((resolve) => {
var $img = $(`<img id='hiddenImage' src='${imageData}' />`);
$img.on('load', function() {
resolve($img);
});
$("body").append($img);
}).then((result) => {
/* Wait until image is loaded */
var width = $('#hiddenImage').width();
var height = $('#hiddenImage').height();
$('#hiddenImage').remove();
alert('width = ' + width);
console.log(width);
});
}
getImageDimensions(`https://i.stack.imgur.com/L6RvS.png?s=48&g=1`);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.0.2/jquery.min.js"></script>
你可以做这样的事情:
function getImageDimensions(imageData) {
var image = new Image();
image.onload = function(data){
var width = data.target.width;
return width;
}
image.src = imageData;
}
一个函数不能返回多个值。但是,您可以通过返回包含多个值的数组来获得类似的结果。您可以返回一个值数组。
function getImageDimensions(imageData) {
$("body").append("<img id='hiddenImage' src='" + imageData />"');
/* Wait until image is loaded */
var width = $('#hiddenImage').width();
var height = $('#hiddenImage').height();
$('#hiddenImage').remove();
var size = [width, height];
return size;
}
或者,如果要标记每个返回值以便于访问和维护,也可以返回对象
function getImageDimensions(imageData) {
$("body").append("<img id='hiddenImage' src='" + imageData />"');
/* Wait until image is loaded */
var width = $('#hiddenImage').width();
var height = $('#hiddenImage').height();
$('#hiddenImage').remove();
var size = {
width: width,
height: height
};
return size;
}