为什么我没有得到一个加载处理程序

Why am I not getting an onload handler?

本文关键字:一个 加载 程序 处理 为什么      更新时间:2023-09-26

我有几个图像正在尝试加载。每个都连接到一个单独的处理程序,用于检查是否所有图像都在显示,如果是,则在画布上显示它们。

处理程序目前在顶部有一个console.log(),它是:

POCKETWATCH.check_draw_clock = function()
    {
    console.log("check_draw_clock");
    POCKETWATCH.images_loaded_count += 1;
    if (POCKETWATCH.images_loaded_count ==
      POCKETWATCH.total_images_available * 2)
        {
        POCKETWATCH.draw_clock();
        }
    }

我开始加载图像:

console.log('Starting images.');
POCKETWATCH.clock_face = new Image();
POCKETWATCH.clock_face.onload = POCKETWATCH.check_draw_clock;
POCKETWATCH.clock_face.src = 'img/transparent-clock.png';
POCKETWATCH.hour_hand = new Image();
POCKETWATCH.hour_hand.onload = POCKETWATCH.check_draw_clock;
POCKETWATCH.hour_hand.src = 'img/hour-hand.png';
POCKETWATCH.minute_hand = new Image();
POCKETWATCH.minute_hand.onload = POCKETWATCH.check_draw_clock;
POCKETWATCH.minute_hand.src = 'img/minute-hand.png';
POCKETWATCH.second_hand = new Image();
POCKETWATCH.second_hand.onload = POCKETWATCH.check_draw_clock;
POCKETWATCH.second_hand.src = 'img/second-hand.png';
POCKETWATCH.dial_hand = new Image();
POCKETWATCH.dial_hand.onload = POCKETWATCH.check_draw_clock;
POCKETWATCH.dial_hand.src = 'img/dial-hand.png';
console.log('Images all started.');

之后的控制台没有错误,只有"Starting images."answers"images all started.",没有"check_draw_clock",也没有错误。这些图像是从我的另一个项目复制的,据我所知,有适当的文件系统权限等,图像都在那里。

我如何获得这样的语句:加载图像时没有引用回调函数,也没有报告错误?

--更新--

作为对第一个答案的回应,我注释了我现有的代码,并添加了突变为的代码

['img/transparent-clock.png','img/hour-hand.png','img/second-hand.png','img/dial-hand.png'].forEach(function(src)
    {
    var img = new Image();
    // img.onload = POCKETWATCH.check_draw_clock;
    img.onerror = function(){ console.log("error"); };
    img.src = src;
    if (img.complete) { POCKETWATCH.check_draw_clock(); }
    console.log(POCKETWATCH.check_draw_clock);
    POCKETWATCH.check_draw_clock();
    });

这不是一个解决方案,而是用于诊断目的。最后一行代码记录了一个错误,即POCKETWATCH.check_draw_clock"不是一个函数",然后当我记录POCKETWatTCh.check_draw_clock时,它记录了"未定义"。

我检查了我的代码,看看我是否重新定义了POCKETWATCH;在与应用程序相关联的整个代码中,定义POCKETWATCH的唯一时间是在引用的代码之上,在引用代码处它被设置为{}。check_draw_clock()也只定义一次。

FWIW。

检查图像是否缓存有完整的

['img/transparent-clock.png','img/hour-hand.png','img/second-hand.png','img/dial-hand.png'].forEach(function(src){ 
    var img = new Image();
    img.onload = POCKETWATCH.check_draw_clock;
    img.onerror = function(){ console.log("error"); };
    img.src = src;
    if (img.complete) { POCKETWATCH.check_draw_clock(); }
});

一直浏览console.log check_draw_clock(),发现POCKETWATCH的定义是在我引用的内容之后,而不是之前。现在日志记录是有意义的。