昏黄烛火轻摇晃 2017-11-04 14:05 采纳率: 61.5%
浏览 3056

Javascript img.onload带来的问题,求解答

下面的imgLength++这么写是不是有点不合理? 在本地图片的加载不是几乎是在src设置完的瞬间就完成了,那么此时的imgLength++刚为1,tempImg.onload函数就执行了,loaded++就为1,那么此时就满足条件 执行回调了,而且下面的这段imgObj[ key ] = tempImg还没设置 就onload了 那么传过去的不就是空对象;求解答?
函数部分:
function loadImage( imgUrl, fn ) {

    //存储图像资源
    var imgObj = {};
    var tempImg;
    //记录已经加载完毕的图片数量
    var loaded = 0;
    //统计要加载的图像数量
    var imgLength = 0;
    //遍历所有url,动态创建img
    for ( var key in imgUrl) {

        imgLength++;
        //根据遍历到的url,加载图像
        tempImg = new Image();
        tempImg.onload = function(){
            loaded++;
            //当图片加载的数量大于等于要加载的数量就可以执行回调
            if ( loaded >= imgLength){  
                fn( imgObj );

            }
        };
        tempImg.src = imgUrl[ key ];
        //把当前加载的图像存储起来
        imgObj[ key ] = tempImg;
    }
}

调用部分:
loadImage({
bird: './img/bird.png',
land: './img/land.png',
}, function( imgObj ) {

            })
  • 写回答

1条回答 默认 最新

  • ZHOUMOL 2018-08-21 06:20
    关注

    事件的绑定是异步的,以下是在for循环执行完后执行的
    tempImg.onload = function(){
    loaded++;
    //当图片加载的数量大于等于要加载的数量就可以执行回调
    if ( loaded >= imgLength){

    fn( imgObj );

            }
        };   
    
    评论

报告相同问题?

悬赏问题

  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?