0

我想将图像目录预加载到我的画布中,以便在需要时可以显示它们。

我在 stackoverflow 上发现了这个问题, 并且接受的答案非常有帮助。它们的函数遍历图像位置数组,然后(我假设)将它们预加载到画布上。

使用此功能预加载它们后,我很难实际显示它们。我很清楚单个图像加载方法 -

img = new Image();
img.src = imgLocation;
img.onload = function() {
  context.drawImage(img, 0, 0);
}

但由于它们已经加载,我假设我不需要使用img.onload或任何上述代码,除了context.drawImage实际显示图像。

当我尝试从(我只能假设是其中包含所有图像的输出数组)加载图像时,我得到一个类型错误。当我console.log()在它说的任何索引处检查数组内部的内容时(带有 a )[object, Object]

我的代码代码如下所示:

var framesArr = new Array();
var framesAmnt = 300; // we would normally get this number from the PHP side of things

function ldBtn(){

    //load all frames locations into framesArr
    var i=0;
    for (i=0;i<=(framesAmnt-1);i++){
        framesArr[i] = "frames/Frame" + i + ".png";
    }

    //preload them
    preloadImages(framesArr, preloadDone);
}

var deferreds = [];
var deferred;

function preloadImages (paths, callback) {

    $.each(paths, function (i, src) {
        deferred = $.Deferred(),
        img = new Image();

        deferreds.push(deferred);
        img.onload = deferred.resolve;
        img.src = src;
    });

    $.when.apply($, deferreds).then(callback);
}

function preloadDone(){
    //any old index number will do. *Shruggs*
    context.drawImage(deferreds[2], 0, 0); //this will cause a type error.
}

如何在该preloadImages函数加载的画布上显示图像?

我想我不完全理解发生时img = new Image(); img.src = imgLocation; img.onload = function()会发生什么。javascript/jquery 将图像存储为什么?如果答案是“一个对象”,那么它为什么不加载这个数组中的对象呢?

提前感谢您提供的任何建议。

4

1 回答 1

3

首先,您需要将一个实际的图像元素传递给该drawImage方法。现在你正在传递一个延迟。

接下来,Chrome 和原生元素构造函数 ( new Image()) 存在错误。

因此,只需使用document.createElement("img")which 将做完全相同的事情 - 没有错误。

查看相关的错误:

我在这里创建了一个简化的示例:http: //jsfiddle.net/YVDpD/

于 2013-06-06T00:55:51.143 回答