[AS3]as3简单渐进式加载图片类ByteLoader
你可能会说“我的目的很简单,我只是要加载一张图片,用渐进的方式边加载边显示,我可不知道哪里有一串字符串让我去加载。嗯,来看看这个类吧,ByteLoader继承Loader类,使用方法跟Loader类一样简单
你可能会说“我的目的很简单,我只是要加载一张图片,用渐进的方式边加载边显示,我可不知道哪里有一串字符串让我去加载。嗯,来看看这个类吧,ByteLoader继承Loader类,使用方法跟Loader类一样简单。
原理是:
用URLStream类去加载图片数据流,
然后用帧循环stream.readBytes(data, data.length)将数据读入ByteArray中;
同时在帧循环中卸载Loader中旧的数据,加载新的数据super.unload();super.loadBytes(data);
代码如下:
- package {
- import flash.events.EventDispatcher;
- import flash.events.ProgressEvent;
- import flash.events.Event;
- import flash.utils.ByteArray;
- import flash.net.URLStream;
- import flash.net.URLRequest;
- import flash.display.Loader;
- public class ByteLoader extends Loader{
- public var url:String;
- public var data:ByteArray;
- private var stream:URLStream;
- public function ByteLoader(url:String = ""){
- if(url != ""){
- loadUrl(url);
- }
- }
- //CuPlayer.com 加载
- public function loadUrl(_url:String):void{
- url = _url;
- data = new ByteArray;
- stream = new URLStream;
- stream.load(new URLRequest(url));
- stream.addEventListener(Event.COMPLETE,completeFun);
- stream.addEventListener(ProgressEvent.PROGRESS,progressFun);
- addEventListener(Event.ENTER_FRAME,loaddata);
- }
- private function loaddata(e:Event):void{
- if (stream.bytesAvailable > 0){
- stream.readBytes(data, data.length);
- }
- if (data.length > 0){
- super.unload();
- super.loadBytes(data);
- }
- }
- // CuPlayer.com 加载中
- private function progressFun(erogressEvent):void{
- if(stream.bytesAvailable == 0) return;
- dispatchEvent(e);
- trace(e.bytesLoaded);
- }
- //CuPlayer.com 加载完成
- private function completeFun(e:Event):void{
- stream.removeEventListener(Event.COMPLETE,completeFun);
- stream.removeEventListener(ProgressEvent.PROGRESS,progressFun);
- dispatchEvent(e);
- this.closeStream();
- }
- //CuPlayer.com 清除数据
- public function closeStream():void{
- if (stream){
- if (stream.connected) stream.close();
- }
- if (hasEventListener(Event.ENTER_FRAME)){
- removeEventListener(Event.ENTER_FRAME, loaddata);
- }
- }
- }
- }
热门文章推荐
- [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示例
请稍候...