最近因为公司一个小案子上出的问题,研究了一下MovieClipLoader这东西的特性, 发觉到onLoadComplete的意义不等于onLoadInit。
也就是说,一般逻辑思考下,档案都下载完了,应该就能用这件事情,在这里是错的。
好比说onLoadComplete事件被触发的时候,被载入的档案的frame label其实还无法使用, 感觉上onLoadComplete只是侦测档案被完全下载到记忆体中。
后来一时好奇加上好玩,我就想说,那来看看这两个事件被触发的秒差吧~
varmy_mcl:MovieClipLoader=newMovieClipLoader();
varmyListener:Object=newObject();
contenter_mc._visible=0;
functionGetTime(){
varGTi:Date=newDate();
//vartmp=GTi.getTime();
vartmp="";
tmp+=GTi.getFullYear()+":";
tmp+=GTi.getMonth()+1+":";
tmp+=GTi.getDate()+":";
tmp+=GTi.getDay()+":";
tmp+=GTi.getHours()+":";
tmp+=GTi.getMinutes()+":";
tmp+=GTi.getSeconds()+":";
tmp+=GTi.getMilliseconds();
returntmp;
}
functionTryLoader(file){
my_mcl.loadClip(file,contenter_mc);
myListener.onLoadStart=function(ok){
if(ok){
trace("onLoadStart:"+GetTime());
status_txt.text+="onLoadStart:"+GetTime()+"\n";
}
};
myListener.onLoadProgress=function(ok){
get_txt.text=my_mcl.getProgress(contenter_mc).bytesLoaded;
all_txt.text=my_mcl.getProgress(contenter_mc).bytesTotal;
};
myListener.onLoadComplete=function(ok){
if(ok){
trace("onLoadComplete:"+GetTime());
status_txt.text+="onLoadComplete:"+GetTime()+"\n";
}
};
myListener.onLoadInit=function(ok){
if(ok){
trace("onLoadInit:"+GetTime());
status_txt.text+="onLoadInit:"+GetTime()+"\n";
contenter_mc._visible=1;
}
};
myListener.onLoadError=function(ok){
if(ok){
trace("onLoadError:"+GetTime());
status_txt.text+="onLoadError:"+GetTime()+"\n";
}
};
my_mcl.addListener(myListener);
} 按钮触发代码:
on(release){
TryLoader("自己找个URL");
} 我透过FLASH自己的Date物件去抓我这台电脑上的时间,得到的结果是:
onLoadStart:2005:6:2:4:23:42:31:718
onLoadComplete:2005:6:2:4:23:42:59:718
onLoadInit:2005:6:2:4:23:42:59:750
我没注意过onLoadInit一定晚onLoadComplete多少毫秒,但我能确定一定比较晚触发。
不过两者的毫秒差,好像每次执行都有些不同,有时候甚至同时(FLASH认为同时)。
不过在远端的档案已经在本地端有「暂存」的状态下,重新整理好几次,都是得到差28毫秒。