【问题标题】:How to Return Values from this Function call?如何从此函数调用返回值?
【发布时间】:2017-02-25 20:07:35
【问题描述】:

我有一个获取图像尺寸的功能。我从 createObjectURL 发送返回。

它在获取尺寸方面效果很好,但我无法取回值。我正在尝试获取这两个值,但问题似乎是函数中有一个函数。并且外部函数不知道内部函数中设置的值。当我硬编码一个值时,如下面的“qq”就可以了。所以我可以看到问题不在返回值中,而是在值中。

在这种情况下你如何读取这些值?

imgSrc = window.URL.createObjectURL(this.files[0]);

var imgSize = getImgSize(imgSrc);
var newWidth = imgSize.retWidth;
var newHeight = imgSize.retHeight;

alert(newWidth);
alert(newHeight);

function getImgSize(imgSrc) {
  var newImg = new Image();

  newImg.onload = function() {
    var nHeight = newImg.height;
    var nWidth = newImg.width;

    //alert('The image size is ' + width + '*' + height);
  }

  newImg.src = imgSrc; //this must be done AFTER setting onload

  return {
    retWidth: nWidth,
    retHeight: 'qq'
  };
}

【问题讨论】:

标签: javascript jquery css dom


【解决方案1】:

您无法取回它们,因为 .onload 是异步的,处理此问题的最简单方法是从负载处理程序内部调用一个函数。

function getImage(){
  var imgSrc = window.URL.createObjectURL(this.files[0]);
  getImgSize(imgSrc,useImgSize);
}

function getImgSize(src,fn){
  var img=new Image();
  img.onload=function(){
    fn({width:img.width,height:img.height});
  }
  img.src=src;
}

function useImgSize(dimensions){
  alert(dimensions.width);
  alert(dimensions.height);
}

在这里,我对流程的每个步骤都使用了一个函数。你有 getImage 开始这个过程。然后调用以图像源和回调函数作为参数的实用函数(您可以直接调用 useImgSize 函数,但回调允许您将实用函数用于多种用途)。最后,您可以对 useImgSize 函数中的尺寸进行任何操作。

【讨论】:

  • 所以我在负载处理程序中添加了一个函数 nextStep,但是 nextStep 是做什么的?我会将值传递给该函数,但我仍在调用 getImageSize...而不是 nextStep...,它正在接收值。我有点困惑……好吧,很困惑。
  • 我需要用完一段时间,但稍后会更仔细地研究。我非常感谢您的反馈。
  • 好的。所以,有点不好意思承认我还是不懂。但是......我把代码放进去,它就可以工作了。我可以从 useImageSize 函数访问高度和宽度。我希望从主要部分(在此示例中为 getImg)访问值,因此我可以调用例程以出于不同原因获取大小并用它做不同的事情。在这种情况下,我想我需要做任何需要来自 useImageSize 的维度的任务,而不是主进程,对吗?
  • 是的,也许将 useImageSize 视为主要功能,而将其他两个视为实现目标的助手会有所帮助。
  • 好的。这行得通。但是,很难将图像尺寸用于其他用途。因为 useImageSize 不是我的主要功能。例如,我还计划调用一个模态,我也需要它的图像大小。但我确信我可以解决它。我继续我的下一个,我认为,最后一期。在我删除“正在加载”消息之前等待图像完全加载。如果您有任何想法,我会喜欢您的意见。我真的迷失了这个。 deferred 和 promise 完全让我感到困惑:stackoverflow.com/questions/42493647/…
猜你喜欢
  • 1970-01-01
  • 2020-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-11
  • 2020-12-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多