如何在变量值后命名函数?

时间:2012-07-27 00:49:58

标签: javascript image html5 loading

我有一个允许您加载新图像的功能。我希望该函数创建一个函数来检测何时加载该图像,并将其存储在数组或对象中。我有另一个将通过数组或对象的函数,并检查每个函数以查看它是否已加载。

我的问题是,如何将每个新函数添加到数组中,并让每个函数返回是否加载了要设置为检查的图像?

**编辑**

我想将名称传递给加载图像的函数,加载'images/'+name+'.png',然后将名称作为键的名称传递给数组或对象。

**回复Shawn31313: 这是我所拥有的基本内容:

var resources = {
    // I have other stuff to load here
    'newImg': function(name) {
        if (name) {
            var img = new Image();
            img.src = 'images/' + name + '.png';
            imgLoadingArray[name] = function () {
                var loaded = false;
                // detect image loading some how
            }
        }
    },
    'imgLoadingArray': {},
    'loaded': function() {
        var loaded = true;
        for (each in game.resources.imgLoadingArray) {
            if (each == 'false') {
                loaded = false;
            }
            return loaded;
        }
    }
}

3 个答案:

答案 0 :(得分:2)

在我看来,你只需要在图像上设置一个onload监听器来设置数组或对象中的值。如果每个图像都有唯一的名称,那么:

var imageLoaded = {};

...

'newImg': function(name) { 
    if (name) { 
        var img = new Image(); 
        img.src = 'images/' + name + '.png';
        img.name = name;
        imageLoaded[name] = false;
        img.onload = function() {imageLoaded[this.name] = true;};
        ...
     }
  },
  ...

未测试。

答案 1 :(得分:1)

您可以创建字典:

var actions = [];

function createAction(name) {
 actions[name] = function() {alert('Hi from:'+ name);};
}

createAction('hello world');

actions['hello world']();

答案 2 :(得分:0)

我刚刚意识到......为什么要变量呢?把整个东西扔进一个物体进行装载!

var resources = {
    // load some other stuff
    'newImg': function(name) {
        if (name) {
            game.resources.imgLoading[name] = new Image();
            game.resources.imgLoading[name].src = 'images/' + name + '.png';
            game.resources.imgLoadedCheck[name] = false;
            game.resources.imgLoading[name].onload = function() {game.resources.imgLoadedCheck[name] = true;};
        }
    },
    'imgLoading': {},
    'imgLoadedCheck': {},
    'loaded': function() {
        var loaded = true;
        for (each in game.resources.imgLoadingArray) {
            if (each == 'false') {
                loaded = false;
            }
            return loaded;
        }
    }
};