javascript - 如何确定未附加到 DOM 的图像的加载状态

标签 javascript jquery image

我正在编写一些 javascript 来在 <canvas 上绘制数据。 >。数据点由几个不同(小)图像文件之一标记。我试图让绘图方法等待所有图像加载完毕。迄今为止我最好的尝试是这样的:

var icon = {
    left : {
        air : new Image(),
        bone : new Image(),
    },
    right : {
        air: new Image(),
        bone : new Image(),
    },
};

icon.left.air.src   = option.imgPath + 'left.air.png';
icon.right.air.src  = option.imgPath + 'right.air.png';
icon.left.bone.src  = option.imgPath + 'left.bone.png';
icon.right.bone.src = option.imgPath + 'right.bone.png';


function main() {
    Canvas.draw();

    // Make sure our image icons are loaded before we try to plot
    $(icon.left.air).load(function() {
        $(icon.right.air).load(function() {
            $(icon.left.bone).load(function() {
                $(icon.right.bone).load(function() {
                    Data.plot();
                });
            });
        });
    });
}

大多数情况下,这都可以按预期工作。有时,它会失败并且不会绘制任何数据。插入几个 console.log() 语句表明脚本将默默地停止执行一系列 .load() 语句,尽管后面的代码将被执行。

我的问题如下:我是否以正确的方式处理这个问题?有没有办法将一个事件附加到我的图标对象,一旦加载了所有内部图像,该事件就会触发?

这是一个 jquery 插件,因此显然基于 jquery 的解决方案与普通 javascript 一样可以接受。

最佳答案

如果我错了,请原谅我,但是你的 load 逻辑不是有缺陷吗?如果 right.airleft.air 之前加载会发生什么?最里面的 load 事件永远不会触发,那么剧情就不会开始,不是吗?

我会以不同的方式执行此操作:有四个标志,并且相应的 load 事件将其自己的标志设置为 true。在每个事件结束时检查所有四个标志是否都设置为 true。如果是,那么您就可以开始了。

baloo 所说的:在分配 src 之前,您需要绑定(bind) load 事件。

关于javascript - 如何确定未附加到 DOM 的图像的加载状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2967424/

相关文章:

javascript - 如何在jquery中更改没有ID的元素?

jquery - CSS 如何为特定的 <li> 设置样式?

android - Nexus 7 的图像尺寸太大了吗?

jquery - 图像调整大小和裁剪以适合父 div

c - 在 OpenCV 中提高相机捕获分辨率

javascript - 构建一个流畅的网络应用程序——现在我用什么来制作前端动画?

javascript - 用于开发/生产环境的备用 grunt.js 任务

javascript - 将图像在 Div 内居中对齐

不接受 jquery 日期验证 jan date

javascript - 将 Json 放入 Web Angular 页面