`
nbkangta
  • 浏览: 437435 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
社区版块
存档分类
最新评论

在Flex中打造漂亮的Loading

    博客分类:
  • Flex
阅读更多
从RIACHINA转来的
原文地址: http://bbs.airia.cn/FLEX/thread-3292-1-1.aspx

效果浏览
http://www.dragonoffspring.cn/preloader/flexpreloaderexample.html

呵呵,看着Jesse Warden的教程来做的
http://jessewarden.com/2007/07/making-a-cooler-preloader-in-flex-part-1-of-3.html

flash里输出的swf实例控制在6k以内,很轻量的。基本不会出现载入preloader时间长的问题。

preloader.as的源码如下,至于swf的fla源文件,可以去Jesse Warden的那个教程里下来自己改动。
package
{
	import flash.display.MovieClip;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.ProgressEvent;
	
	import mx.events.FlexEvent;
	import mx.preloaders.DownloadProgressBar;

	/**
	 * This class extends the lightweight DownloadProgressBar class.  This class
	 * uses an embedded Flash 8 MovieClip symbol to show preloading.
	 * 
	 * @author jessewarden
	 * 
	 */	
	public class Preloader extends DownloadProgressBar
	{
		
		/**
		* The Flash 8 MovieClip embedded as a Class.
		*/		
		[Embed(source="/assets/flash/myPreloader.swf", symbol="Preloader")]
		private var FlashPreloaderSymbol:Class;
		
		private var clip:MovieClip;
		private var _preloader:Sprite;
		
		public function Preloader()
		{
			super();
			
			// instantiate the Flash MovieClip, show it, and stop it.
			// Remember, AS2 is removed when you embed SWF's, 
			// even "stop();", so you have to call it manually if you embed.
			this.clip = new FlashPreloaderSymbol();
			this.addChild(clip);
			this.clip.gotoAndStop("start");

		}
		
		public override function set preloader(preloader:Sprite):void 
        {                   
            preloader.addEventListener( ProgressEvent.PROGRESS , 	onSWFDownloadProgress );    
            preloader.addEventListener( Event.COMPLETE , 			onSWFDownloadComplete );
            preloader.addEventListener( FlexEvent.INIT_PROGRESS , 	onFlexInitProgress );
            preloader.addEventListener( FlexEvent.INIT_COMPLETE , 	onFlexInitComplete );
            stage.addEventListener(Event.RESIZE, centerPreloader);
            _preloader = preloader;
            centerPreloader();
        }
        
        /**
         * Makes sure that the preloader is centered in the center of the app.
         * 
         */        
        private function centerPreloader(event:Event = null):void
		{
			var adjust_X:Number = 300;		//	X coodinate adjustion according to Object layout.
			var adjust_Y:Number = 500; 		//	Y coodinate adjustion according to Object layout.
			x = ((stage.stageWidth+adjust_X) / 2) - (clip.width / 2);
			y = ((stage.stageHeight+adjust_Y) / 2) - (clip.height / 2);
		}
		
		/**
		 * As the SWF (frame 2 usually) downloads, this event gets called.
		 * You can use the values from this event to update your preloader.
		 * @param event
		 * 
		 */		
		private function onSWFDownloadProgress( event:ProgressEvent ):void
        {
        	var t:Number = event.bytesTotal;
        	var l:Number = event.bytesLoaded;
        	var p:Number = Math.round( (l / t) * 100);
        	clip.preloader.gotoAndStop(p);
        	clip.preloader.amount_txt.text = String(p);
        	clip.preloader.amount_txt_img.text = String(p);
        }
        
        /**
         * When the download of frame 2
         * is complete, this event is called.  
         * This is called before the initializing is done.
         * @param event
         * 
         */        
        private function onSWFDownloadComplete( event:Event ):void
        {
       		clip.preloader.gotoAndStop(100);
        	clip.preloader.amount_txt.text = "100";
        	clip.preloader.amount_txt_img.text = "100";
        }
        
        /**
         * When Flex starts initilizating your application.
         * @param event
         * 
         */        
        private function onFlexInitProgress( event:FlexEvent ):void
        {
        	clip.preloader.gotoAndStop(100);
        	clip.preloader.amount_txt.text = "Init...";
        }
        
        /**
         * When Flex is done initializing, and ready to run your app,
         * this function is called.
         * 
         * You're supposed to dispatch a complete event when you are done.
         * I chose not to do this immediately, and instead fade out the 
         * preloader in the MovieClip.  As soon as that is done,
         * I then dispatch the event.  This gives time for the preloader
         * to finish it's animation.
         * @param event
         * 
         */        
        private function onFlexInitComplete( event:FlexEvent ):void 
        {
			_preloader.removeEventListener( ProgressEvent.PROGRESS ,     onSWFDownloadProgress );    
			_preloader.removeEventListener( Event.COMPLETE ,             onSWFDownloadComplete );
			_preloader.removeEventListener( FlexEvent.INIT_PROGRESS ,     onFlexInitProgress );
			_preloader.removeEventListener( FlexEvent.INIT_COMPLETE ,     onFlexInitComplete );
			stage.removeEventListener(Event.RESIZE, centerPreloader);
        	clip.addFrameScript(21, onDoneAnimating);
        	clip.gotoAndPlay("fade out");
        }
        
        /**
         * If the Flash MovieClip is done playing it's animation,
         * I stop it and dispatch my event letting Flex know I'm done.
         * @param event
         * 
         */        
        private function onDoneAnimating():void
        {
        	clip.stop();
        	dispatchEvent( new Event( Event.COMPLETE ) );
        }
		
	}
}

分享到:
评论

相关推荐

    css+js打造的相册查看器

    在IT行业中,创建一个交互式的相册查看器是常见的需求,尤其在网页设计和开发中。这个主题“css+js打造的相册查看器”涵盖了使用CSS(层叠样式表)和JavaScript技术来构建这样一个功能丰富的组件。接下来,我们将...

    微信小程序vant组件库本地版本,可以直接引用使用

    微信小程序 vant 组件库是基于 Vue.js 构建的一套高度可定制化的 UI 组件集,专为微信小程序...在实际项目中,结合 vant 的文档和示例,可以轻松地根据需求进行组件选择和定制,打造出符合业务需求的高质量小程序应用。

    图文按钮button

    在网页设计和开发中,按钮(Button)是一个至关重要的元素,它用于引导用户进行交互,如点击提交表单、打开新页面或触发某些功能。"图文按钮"是一种结合了图像和文字的按钮,通常用于增强视觉吸引力并清晰传达按钮的...

    百度小程序版本-有赞小程序ui库.zip

    《有赞小程序UI库在百度小程序中的应用与实践》 有赞是一家专注于电商解决方案的公司,其提供的有赞小程序UI库 vantui-baiapp-master 是专门为开发者设计的,旨在简化百度小程序开发过程,提高用户体验。这个UI库...

    2_微信小程序官方组件文档(带目录).7z

    在阅读这份文档时,开发者应重点了解每个组件的属性、事件和方法,以及如何在实际项目中正确使用它们。此外,文档通常还会包含示例代码和注意事项,帮助开发者避免常见错误,提高开发效率。 通过深入学习并熟练掌握...

    uview内置类演示demo

    总结,UView内置类是uni-app开发中的强大工具,通过深入理解和实践"uniapp-demo-uview"中的示例,开发者可以掌握其精髓,提升项目开发效率,打造出高质量的移动应用。在学习过程中,不断探索和实践,将使你在uni-app...

Global site tag (gtag.js) - Google Analytics