为什么我没有得到一个加载处理程序
Why am I not getting an onload handler?
我有几个图像正在尝试加载。每个都连接到一个单独的处理程序,用于检查是否所有图像都在显示,如果是,则在画布上显示它们。
处理程序目前在顶部有一个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的定义是在我引用的内容之后,而不是之前。现在日志记录是有意义的。
相关文章:
- 当一个ajax是SUCCESS时,下一个加载
- 用一个加载项绘制图像阵列
- 为什么串联的 RequireJS AMD 模块需要一个加载器
- Webpack:如何为“webpack”创建一个加载器,它需要一系列依赖项
- 使用onload加载多个图像以调用函数,并且只有最后一个加载的图像调用该函数
- Meteor:使用ReactiveVar创建一个加载小部件,用于订阅用户集合
- 确保一个AngularJS控制器先于另一个加载
- 按下按钮,有一个加载弹出窗口,然后更改弹出文本
- 为什么我没有得到一个加载处理程序
- 为什么我不能在JQuery中选择一个加载了$.get的元素
- 在我的loadmore jquery按钮中添加一个加载gif
- 在注册页面和感谢页面之间包含一个加载页面
- 如果我从另一个加载了ajax的php文件调用一个php文件,我会得到错误
- 是否有可能创建一个加载深度后路径的垫片
- 一个接一个加载javascript函数
- 启动两个脚本的正确方法是什么:一个加载数据,另一个操作样式
- 如何创建一个加载条(循环)
- jQuery加载内部另一个加载不工作
- 在加载文件时显示一个加载指令
- 如何添加一个加载GIF图像到我的网页