您的位置:首页 > Web前端 > JavaScript

异步加载js文件并执行js方法:实现异步处理网页的复杂效果(转)

2012-07-14 23:59 911 查看
有这么一个场景,当你的网页页面效果过多就会造成了打开页面的速度变得缓慢,长时间处于加载的状态,这样的效果通常会让用户感到不友好,通常的处理方法是先加载基本的html,然后再加载其他的网页效果,让用户感觉到页面一下子就出来了,然后其他的网页效果再慢慢的展现出来。这里通过JSLoader组件来实现这种前端的效果
varJSLoader=function(){

varscripts={};//scripts['a.js']={loaded:false,funs:[]}

functiongetScript(url){
varscript=scripts[url];
if(!script){
script={loaded:false,funs:[]};
scripts[url]=script;
add(script,url);
}
returnscript;
}

functionrun(script){
varfuns=script.funs,
len=funs.length,
i=0;

for(;i<len;i++){
varfun=funs.pop();
fun();
}
}

functionadd(script,url){
varscriptdom=document.createElement('script');
scriptdom.type='text/javascript';
scriptdom.loaded=false;
scriptdom.src=url;

scriptdom.onload=function(){
scriptdom.loaded=true;
run(script);
scriptdom.onload=scriptdom.onreadystatechange=null;
};

//forie
scriptdom.onreadystatechange=function(){
if((scriptdom.readyState==='loaded'||
scriptdom.readyState==='complete')&&!scriptdom.loaded){

run(script);
scriptdom.onload=scriptdom.onreadystatechange=null;
}
};

document.getElementsByTagName('head')[0].appendChild(scriptdom);
}

return{
load:function(url){
vararg=arguments,
len=arg.length,
i=1,
script=getScript(url),
loaded=script.loaded;

for(;i<len;i++){
varfun=arg[i];
if(typeoffun==='function'){
if(loaded){
fun();
}else{
script.funs.push(fun);
}
}
}
}
};
}();

调用方法示例:
先在页面上加载JSLoader.js文件
然后执行
JSLoader.load('js/test.js',function(){a();})
表示异步加载test.js文件,并且加载完成后再执行a()方法,a()方法是test.js里面的方法,a()方法就是负责渲染一些前端页面的网页效果来的。
不过该方法在ie7下并不会产生异步的效果,在ie7下需要使用延时触发器来包装一下,如:
setTimeout("JSLoader.load('js/test.js',function(){a();})",1);

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐