这个loader, 每次载入一个js文件, 在前一个文件完全载入后, 才继续载入下一个文件.
Loader提供了俩个事件:
onLoad 每当一个单独的js文件被载入完成后, 就会调用这个事件函数.
onReady 当全部载入完成后, 会调用OnReady事件处理函数.
** 一个完整的实例, 看这里: Eve Js loader**
例子:
var loader = Loader;
loader.onReady = function(){
alert('全部载入完成');
}
loader.on('onLoad', function(name) {
alert(name + '载入完成');
});
loader.load([
'http://www.laruence.com/1.js',
'http://www.laruence.com/test.js',
'http://www.laruence.com/main.js'
]Loader.js
/**
* Eve Js Loader
* @version 1.0.1
* @author laruence<laruence at yahoo.com.cn>
* @copyright (c) 2009 www.laruence.com
*/
/**
* a global object instance, you can easily change to a class definition
*/
var Loader = {
/**
* @var onLoad when load a individual file completed ,
* this event will be fired * @param string name loaded script file name
*/
onLoad : function(name){},
/**
* @var onReady when all scripts loaded, this event will be fired
*/
onReady : function(){},
/**
* a empty constructor
*/
init : function(container) {
},
/**
* a empty error handler
*/
handlerError : function(e) {
alert(e);
},
/**
* event register
* @param string evt event name
* @param function handler
*/
on : function(evt, handler) {
switch ( evt.toLowerCase() ) {
case 'load' :
this.onLoad = handler;
break;
case 'ready' :
this.onReady = handler;
break;
default :
break;
}
return true;
},
/**
* private method
*/
_load : function(path, callback) {
try {
var script = document.createElement('script');
script.src = path;
script.type = "text/javascript";
document.getElementsByTagName("head")[0].appendChild(script);
if( script.addEventListener ) {
script.addEventListener("load", callback, false);
} else if(script.attachEvent) {
script.attachEvent("onreadystatechange", function(){
if(script.readyState == 4
|| script.readyState == 'complete'
|| script.readyState == 'loaded') {
callback();
}
});
}
} catch(e) {
this.handlerError(e);
callback();
}
},
/**
* start loding process
* @param array scripts files want to be loaded
*/
load : function(scripts) {
var total = scripts.length;
var _self = this;
var indicator = arguments[1] || 0;
if ( indicator >= total ) {
_self.onReady();
return true;
}
var callee = arguments.callee;
var script = scripts[indicator];
this._load(script, function() {
_self.onLoad(script);
callee.apply(_self, [scripts, ++indicator]);
});
return true;
}
}备忘: http://code.google.com/p/evejsloader/