javascript - 如何从此函数调用返回值?

标签 javascript jquery css dom

我有一个获取图像尺寸的函数。我发送来自 createObjectURL 的返回值。

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

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

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'
  };
}

最佳答案

您无法取回它们,因为 .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 函数中对尺寸进行任何您想要的操作。

关于javascript - 如何从此函数调用返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42461023/

相关文章:

php - 无法使用 html、php 和 mysql 填充下拉菜单

css - 当我在其上向左或向右应用填充时,为什么这个 div 会越过其父级?

javascript - Bootstrap 表上的粘性列和标题

javascript - 如何让鼠标远离这些颗粒

Javascript 最佳实践——在 DOM 中隐藏元素或生成 DOM 元素

javascript - 检查 JSON 中的重复项

javascript - 如何使 Bootstrap jQuery 数据表响应并根据页面大小增加/减少滚动条高度?

javascript - 如何对齐谷歌自定义搜索框?

javascript - 如何使用 react 路由器将数据从一个页面传递到另一个页面

javascript - 如何使用 JavaScript 手动重新加载 Google map