javascript出现问题并返回值
我想返回window.imgwidth,这样我就可以在其他地方使用它,但如果我试图提醒它或类似的东西,它会显示为空白。如何返回其值。window.imgwidth是我尝试创建全局变量的过程。我不需要窗口的宽度我认为问题是,当执行find\u img\u dm时,您试图立即返回宽度值。这将不起作用,因为img.onload很可能在函数完成执行之前不会被激发javascript出现问题并返回值,javascript,function,Javascript,Function,我想返回window.imgwidth,这样我就可以在其他地方使用它,但如果我试图提醒它或类似的东西,它会显示为空白。如何返回其值。window.imgwidth是我尝试创建全局变量的过程。我不需要窗口的宽度我认为问题是,当执行find\u img\u dm时,您试图立即返回宽度值。这将不起作用,因为img.onload很可能在函数完成执行之前不会被激发 您需要做的是在onload事件处理程序中,调用另一个函数,传入width值,并让该函数在加载图像时执行您需要执行的操作。然后您将知道,此时,图
您需要做的是在onload事件处理程序中,调用另一个函数,传入width值,并让该函数在加载图像时执行您需要执行的操作。然后您将知道,此时,图像已加载,并且宽度值可用 好的,试试这个。必须在函数测试中返回window.imgwidth的值:
function find_image_dm(imgsrc){
window.imgwidth = "";
var img = new Image();
img.onload = function test() {
var width = this.width;
var height = this.height;
if (height > 300) {
var x = height/300;
window.imgwidth = Math.ceil(width/x);
}
}
img.src = imgsrc;
return(window.imgwidth);
}
嗯。“这又是一次尝试,”汤姆 据我所见,这里可能有两个问题
window.imgwidth
,因为这似乎是您计算它的唯一位置函数测试()中计算窗口.imgwidth
,但未返回
您尝试的问题是的
onload
回调异步执行。因此,您无法可靠地返回任何内容,因为onload
回调将在将来某个时间执行。与其考虑返回值,不如考虑将回调函数参数传递给find\u image\u dm
函数:
function find_image_dm(imgsrc){
window.imgwidth = "";
var img = new Image();
img.onload = function test() {
var width =this.width
var height= this.height;
if(height > 300){
var x = height/300;
console.log(Math.ceil(width/x));
window.imgwidth = Math.ceil(width/x);
console.log(window.imgwidth);
alert (window.imgwidth);
return window.imgwidth;
}
}
img.src = imgsrc;
}
您可以这样使用:
function find_image_dm(imgsrc, callback)
{
var img = new Image();
img.onload = function()
{
callback(this.width, this.height);
};
img.src = imgsrc;
}
演示:查看您的代码,问题似乎是您在尝试获取高度之前没有从技术上加载图像,因为您在onload
调用之后设置了src
如果您正在使用jQuery,那么应该尝试并利用它
function onReturnSize(w, h)
{
console.log('image width is', w);
console.log('image height is', h);
}
find_image_dm('http://placekitten.com/2200/1200', onReturnSize);
函数查找图像(imgsrc){
var imgWidth,
img=$('300){
var x=高度/300;
imgWidth=Math.ceil(宽度/x);
}
});
返回imgWidth;
}
好的。。。我检查了你的代码,发现你的脚本有问题。您使用的是image.onload函数,因此当您加载图像源时,图像加载,然后只有维度可用并存储在window.imgwidth上
一切正常,但问题是,当您调用函数时,加载u映像需要时间,因此如果您尝试获取window.imgwidth,因为资源仍在加载,您将无法获取window.imgwidth。返回值也将不起作用,因为代码不会等待图像加载,所以尽管图像正在加载,但代码块执行将完成,因此window.imgwidth中不会有任何数据
如果在图像加载完成后的特定持续时间后尝试向window.imgwidth发出警报,则可以看到window.imgwidth具有该值。还有if块,仅当高度超过300时才将数据存储在window.imgwidth中,但没有else块,因此也需要将其作为后备实现:)
如果我说得很难听,请告诉我:-D对不起@Tom。误读了问题。我删除了我的答案。没关系。谢谢你发邮件attempt@Matt-不确定我从哪里得到这个疯狂的想法(+1)
function find_image(imgsrc) {
var imgWidth,
img = $('<img/>').attr('src', imgsrc).load(function() {
var $img = $(this),
height = $img.height(),
width = $img.width();
if (height > 300) {
var x = height/300;
imgWidth = Math.ceil(width/x);
}
});
return imgWidth;
}