1、Loadding——FLASH网站得以生存的根本。
是的,你没看错,如果没有loadding那么flash网站不会得到用户认可,一个不知道多长时间可以加载完的swf文件,客户很少会停留几秒在这个一片空白的地方,Loadding给了用户一个承诺,百分比进度条。
As2年代的loadding——loadding在as2年代的时候有三种表现方式。使用到的方法也很简单,那就是getBytesTotal()和getBytesLoaded,在加载外部文件的时候会使用loadMovie和MovieClipLoader,一般加载swf文件最简单的方法是主文件loadMovie,子文件使用getBytesTotal()和getBytesLoaded(),在加载外部图片文件时,则使用MovieClipLoader方法
1、早在flash5之前就开始使用的帧控制。在FLASH文件的第一帧做为整个程序的入口,而第二帧做为判断加载百分比,进行分支选择回到第一帧还是,下一帧,开始动画。
2、在FLASH文件的第一帧,也就是程序的入口处,使用循环来判断当前加载进度,加载完成时跳出循环,结束加载。
3、加载无程序的文件-图片,使用MovieClipLoader的loadClip方法来加载文件,同时生成一个Object的实例,做为侦听器,使用Object的onLoadProgress和onLoadComplete方法来处理加载中和完成后的操作,这种方式和现在的as3极为接近,只是在类继承上比较混乱。
As3时代的loadding——面向对像的“抽象”加载。
As3是面向对像的,在帮助文档中,我们看到as3的loadding是由两个主要类来完成工作的,一个是flash.display.Loader,一个是flash.net.URLRequest,对面向对像没什么概念的朋友可以看一下殿堂之路第五章到第十章(现在网上也有PDF格式的,不过这样的好书,还是放在桌头的好,此处非广告,个人看书感言),也可以在论坛的殿堂之路专区看看我发的“无oo基础as3殿堂之路学习心得系列”,我们初学时,先熟悉它的用法,不必刻意追求为什么1+1=2这样复杂的问题。
做as3的loadding要使用到的as3类会有:flash.display.Loader;flash.display.Sprite; flash.events.*;flash.net.URLRequest;flash.text.TextField;
详细看代码和注释吧。
//声明类
public class Loadding extends Sprite {
private var url:String = "image.jpg";//载入的目标
private var loadtxt:TextField;//进度显示文字
//构造函数
public function Loadding() {
var loader:Loader = new Loader();
configureListeners(loader.contentLoaderInfo);//设置contentLoaderInfo的监听事件
loader.addEventListener(MouseEvent.CLICK, clickHandler);//单击事件后会卸载loader
var request:URLRequest = new URLRequest(url);//建立URLRequest对象,并将载入目标传入参数
loader.load(request);//加载目标
addChild(loader);//loader来自display对像,需要显示在舞台才工作
loadtxt=new TextField();//生成文字对像实例
loadtxt.text="loadding";//初始化文字内容
addChild(loadtxt);//添加到舞台
}
private function configureListeners(dispatcher:IEventDispatcher):void {
dispatcher.addEventListener(Event.COMPLETE, completeHandler);//加载完毕,执行completeHandler方法
dispatcher.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler);//HTTP 状态代码。 例如,值为 404 表示服务器尚未找到所请求 URI 的匹配项
dispatcher.addEventListener(Event.INIT, initHandler);
dispatcher.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);//处理加载目标不存在的错误
dispatcher.addEventListener(Event.OPEN, openHandler);
dispatcher.addEventListener(ProgressEvent.PROGRESS, progressHandler);//处理加载过程中
dispatcher.addEventListener(Event.UNLOAD, unLoadHandler);//移除loader
}
//加载完毕
private function completeHandler(event:Event):void {
trace("completeHandler: " + event);
removeChild(loadtxt);//加载完毕后在显示列表中移除loadtxt
}
//HTTP 状态代码。
private function httpStatusHandler(event:HTTPStatusEvent):void {
trace("httpStatusHandler: " + event);
}
//事件初始化
private function initHandler(event:Event):void {
trace("initHandler: " + event);
}
//IO错误处理
private function ioErrorHandler(event:IOErrorEvent):void {
trace("ioErrorHandler: " + event);
}
private function openHandler(event:Event):void {
trace("openHandler: " + event);
}
//加载中
private function progressHandler(event:ProgressEvent):void {
trace("progressHandler: bytesLoaded=" + event.bytesLoaded + " bytesTotal=" + event.bytesTotal);
var _loadNum:int=Math.floor(event.bytesLoaded/event.bytesTotal*100);
loadtxt.text=_loadNum+" %"
trace(loadtxt.text)
}
//loader移除后
private function unLoadHandler(event:Event):void {
trace("unLoadHandler: " + event);
}
//移除loader
private function clickHandler(event:MouseEvent):void {
trace("clickHandler: " + event);
var loader:Loader = Loader(event.target);
loader.unload();
}
}
}