| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 | (function (root, factory) {    if (typeof define === 'function' && define.amd) {        //AMD        define(factory);    } else if (typeof exports === 'object') {        //Node, CommonJS之类的        module.exports = factory();    } else {        //浏览器全局变量(root 即 window)        root.resLoader = factory(root);    }}(this, function () {    var isFunc = function(f){        return typeof f === 'function';    }    //构造器函数    function resLoader(config){        this.option = {            resourceType : 'image', //资源类型,默认为图片            baseUrl : './', //基准url            resources : [], //资源路径数组            onStart : null, //加载开始回调函数,传入参数total            onProgress : null, //正在加载回调函数,传入参数currentIndex, total            onComplete : null //加载完毕回调函数,传入参数total        }        if(config){            for(i in config){                this.option[i] = config[i];            }        }        else{            alert('参数错误!');            return;        }        this.status = 0; //加载器的状态,0:未启动   1:正在加载   2:加载完毕        this.total = this.option.resources.length || 0; //资源总数        this.currentIndex = 0; //当前正在加载的资源索引    };    resLoader.prototype.start = function(){        this.status = 1;        var _this = this;        var baseUrl = this.option.baseUrl;        for(var i=0,l=this.option.resources.length; i<l; i++){            var r = this.option.resources[i], url = '';            if(/^(\/|http(s?):\/\/)/.test(r)){                url = r;            } else {                url = baseUrl + r;            }            var image = new Image();            image.onload = function(){_this.loaded();};            image.onerror = function(){_this.loaded();};            image.src = url;        }        if(isFunc(this.option.onStart)){            this.option.onStart(this.total);        }    }    resLoader.prototype.loaded = function(){        if(isFunc(this.option.onProgress)){            this.option.onProgress(++this.currentIndex, this.total);        }        //加载完毕        if(this.currentIndex===this.total){            if(isFunc(this.option.onComplete)){                this.option.onComplete(this.total);            }        }    }    //暴露公共方法    return resLoader;}));
 |