AS2与AS3加载外部对象的区别(如何捕获加载进程)
AS2与AS3加载外部对象的区别(捕获加载进程),通过外部JS定义要加载的文件名,并传参给flash,flashreader必须是js中的同名函数
一、先看AS2:
- //创建一动态文本框,用于提示加载进程
- _root.createTextField("hint",0,200,180,200,20);
- //新建一个box用于装载外部 swf,并定义坐标;
- var mcBox:MovieClip = this.createEmptyMovieClip("mcBox",this.getNextHighestDepth());
- mcBox.x=0;
- mcBox.y=0;
- //新建一个事件听众
- var loadListener:Object = new Object();
- //新建一个MovieClipLoader侦听对象
- var mcLoader:MovieClipLoader = new MovieClipLoader();
- //绑定侦听
- mcLoader.addListener(loadListener);
- //注意:此处是通过外部JS定义要加载的文件名,并传参给flash,flashreader必须是js中的同名函数。
- //as2版本
- ExternalInterface.addCallback("flashreader",null,loadswf);
- //as3版本
- //ExternalInterface.addCallback("flashreader",loadswf);
- function loadswf(parm:String){
- mcBox.unloadMovie();//这句用于释放内存,非常重要
- mcLoader.loadClip(parm,mcBox); //将外部对象,加载到mcBox
- }
- //加载过程中
- loadListener.onLoadProgress=function(target,loadedBytes,totalBytes ){
- hint.text="正在加载文档:"+Math.ceil((loadedBytes/totalBytes)*100)+" %"; //计算已经载入的百分比;
- }
- //加载完毕
- loadListener.onLoadComplete = function(target){
- InitFlashPaper();
- }
- //加载错误
- loadListener.onLoadError = function() {
- hint.text = "Sorry! 未能找到相关文件,无法加载!";
- };
- //定义一个函数重置载入的FlashPaper;
- function InitFlashPaper(){
- this.onEnterFrame = function (){
- if(mcBox.showZoomUI != undefined){
- mcBox.setCurrentZoom(100);//设置缩放百分比
- mcBox.showPrintUI(false);
- delete this.onEnterFrame;
- }
- }
- }
二、再看AS3版本
- //注意,这里的flashreader必须是在js中定义的那个函数名,不能随便起
- ExternalInterface.addCallback("flashreader",loadswf);
- System.useCodePage=true;
- //编码支持中文.
- var loader:Loader=new Loader();
- /**********************************************************************
- 下面是加载、加载过程、加载完毕等诸事件的处理函数,如无必要,勿需更改。
- **********************************************************************/
- //在预设主显示区中心建立一动态文本框,用以显示加载进度信息
- var inputFormat:TextFormat = new TextFormat();
- inputFormat.font="宋体";//字体
- inputFormat.size=12;//字体大小
- inputFormat.color=0XFF0000;
- var loader_txt:TextField = new TextField();
- loader_txt.type=TextFieldType.DYNAMIC;//文本格式
- loader_txt.defaultTextFormat=inputFormat;
- loader_txt.height=20;
- loader_txt.width=200;
- loader_txt.x=400;
- loader_txt.y=500;
- this.addChild(loader_txt);
- function loadswf(parm:String):void {
- loader.unload();
- //此处支持加载任何外部可显示对象,包括jpg,flv,swf等,如果是swf,请注意有版本区别(V>=9.0)
- loader.load(new URLRequest(parm));
- //定义加载过程、加载异常、加载完毕,卸载四个监听事件
- //为了保证连续跟踪,下面所有监听函数,不能定义到loadswf函数的外面
- loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, loadProgress);
- //url地址错误,需要单独捕获,try catch语句块是捕获不到的
- loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,ioError);
- loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadComplete);
- loader.contentLoaderInfo.addEventListener(Event.UNLOAD, unloadswf);
- };
- //函数功能:捕获加载进度
- function loadProgress(e:ProgressEvent):void {
- loader_txt.text="正在加载数据: "+Math.round(e.bytesLoaded/e.bytesTotal*100)+"%";
- }
- //函数功能:捕获加载异常(主要是URL错误异常)
- function ioError(evt:IOErrorEvent) {
- evt.currentTarget.removeEventListener(IOErrorEvent.IO_ERROR,ioError);
- loader_txt.text="加载失败,未找到相关文件。";
- }
- //函数功能:处理加载成功事件,特别注意:只有loader加载成功后,才能对其进行初始化设置
- function loadComplete(e:Event):void {
- loader_txt.text="";//清空加载信息提示
- loader.content.x=0;
- loader.content.y=0;
- loader.content.width=800;
- loader.content.height=600;
- // 如果是swf,则用原swf的帧频进行播放
- this.stage.frameRate=loader.contentLoaderInfo.frameRate;
- // 显示所加载的对象
- this.addChild(loader);
- }
- //函数功能:捕获卸载事件,保证完全卸载(纠正AS3本身的卸载BUG)
- function unloadswf(e:Event) {
- loader.unload(); //待完善
- }
热门文章推荐
- [HLS]做自己的m3u8点播系统使用HTTP Live Streaming(HLS技术)
- [FMS]FMS流媒体服务器配置与使用相关的介绍
- [AS3]什么是M3U8,与HTML5的区别是什么
- AS2.0 让flash自适应全屏,并且不自动缩放
- [AS3]as3.0的sound类常用技巧整理
- [AS3]as3与ByteArray详解、ByteArray介绍、ByteArray用法
- 关于RTMP,RTMPT,RTMPS,RTMPE,RTMPTE协议的介绍
- [JS]分享浏览器弹出窗口不被拦截JS示例
请稍候...