`
nbkangta
  • 浏览: 431619 次
  • 性别: 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 ) );
        }
		
	}
}

分享到:
评论

相关推荐

    Flex 扇形Loading

    Flex扇形Loading是一种在Flex应用中实现的自定义加载指示器,它提供了更加美观和动态的用户体验,替代了默认的加载动画。这种加载效果通常采用扇形或环形的进度条设计,使得用户能够直观地看到加载过程的进度。本文...

    FLEX中文帮助flex中文帮助

    flex中文帮助flex中文帮助flex中文帮助flex中文帮助

    flex 官方文档 中文教程

    在Flex中,ActionScript用于编写业务逻辑和处理用户交互。 4. **Flex组件** Flex提供了大量预定义的UI组件,如按钮、标签、列表、面板等,开发者可以通过这些组件快速搭建用户界面。每个组件都有丰富的属性和方法...

    flex中文帮助文档

    1. 创建项目:在Flex Builder或Adobe Animate CC中创建新项目,选择目标平台(如Flash Player或Adobe AIR)。 2. 设计界面:使用MXML或ActionScript创建组件,定义界面布局。 3. 编写业务逻辑:在ActionScript中编写...

    Flex中文帮助 学习Flex的好资料

    8. **Adobe AIR**:除了Web应用,Flex还可以用来开发桌面应用,借助Adobe AIR(Adobe Integrated Runtime),Flex应用可以脱离浏览器,在用户的桌面上独立运行。 9. **调试和测试**:Flex SDK包含了Flex Builder,...

    flex中文教程.pdf

    Flex是Adobe公司推出的一种用于构建富互联网应用程序(Rich Internet Applications,简称RIA)的开发框架。Flex以其强大的功能和丰富的用户...在不断发展的互联网世界中,掌握Flex技术将为你的职业生涯增添更多可能性。

    《Flex_help》,Flex中文帮助

    在本压缩包"Flex_help"中,你将找到全面的Flex中文帮助文档,这对于正在学习或使用Flex的开发者来说是一份宝贵的资源。 Flex的主要组件包括Flex Builder(现已更名为Flash Builder)、Flex SDK以及Flex Framework。...

    FLEX中文教程+实例

    Flex是Adobe公司开发的一种用于...总结,Flex中文教程与实例是学习和提升Flex开发能力的重要资源,它全面介绍了Flex的各个方面,并通过实践案例加深理解,对于希望在RIA领域发展的开发者来说,是不可或缺的学习材料。

    Flex简明中文教程

    - **Eclipse插件**:除了使用Flex Builder之外,还可以在Eclipse中安装Flex插件来进行开发。 #### 四、Flex开发语言介绍 - **ActionScript 3.0**:一种面向对象的编程语言,用于控制应用程序的行为逻辑,如事件处理...

    Flex中文帮助文档

    7. **事件处理**:在Flex中,事件是组件间通信的主要方式。通过监听和响应事件,开发者可以控制应用的行为,实现用户交互。 8. **Services和Remoting**:Flex支持通过AMF(Action Message Format)进行数据交换,...

    flex中文教程伴有flexbuilder

    这将帮助你理解Flex在RIA开发中的重要性。 2. **ActionScript与MXML**:ActionScript是Flex的主要编程语言,而MXML则是一种用于构建用户界面的标记语言。教程会深入解释这两种语言的语法、特点以及它们如何协同工作...

    Flex中文参考手册

    在Flex中,这两者可以无缝结合,提供高效的开发体验。 在Flex中文参考手册中,你可以找到关于以下关键知识点的详细信息: 1. **组件库**:Flex提供了丰富的组件集合,包括按钮、文本框、列表、面板等,这些组件都...

    Flex4 中文API

    在Flex4中,ActionScript3(AS3)是主要的编程语言,与Flex SDK紧密集成。AS3是ECMAScript的一个子集,拥有更强大的面向对象特性,如类、接口、包和命名空间,这使得它在构建复杂应用程序时更为高效。Flex4中文API...

    flex中文帮助.rar

    1. **Flex概述**:Flex是一个开源的开发框架,主要用于构建在Web浏览器上运行的动态、交互式的应用程序。它提供了丰富的用户界面组件库,可以创建出具有高度互动性和视觉吸引力的网页应用。 2. **ActionScript**:...

    flex中的iframe源码

    在IT行业中,Flex是一种基于ActionScript 3.0和Flash Player的开源框架,主要用于构建富互联网应用程序(RIA)。它提供了一种强大的方式来创建交互式的、动态的Web内容。而"flex中的iframe源码"指的是在Flex环境中...

    flex柱状图表很漂亮的源码

    在本案例中,"flex柱状图表很漂亮的源码"指的是使用Flex技术创建的,具有美观视觉效果的柱状图表。这种图表通常用于数据可视化,帮助用户直观地理解大量信息。 柱状图是一种常见的统计图表类型,它通过矩形的高度或...

    flex 中文帮助文档

    flex 中文帮助文档flex 中文帮助文档flex 中文帮助文档flex 中文帮助文档flex 中文帮助文档flex 中文帮助文档flex 中文帮助文档flex 中文帮助文档flex 中文帮助文档flex 中文帮助文档flex 中文帮助文档flex 中文帮助...

    在myeclipase中搭建flex工程

    在MyEclipse集成开发环境中搭建Flex工程,可以让开发者享受到强大的代码编辑、调试和部署支持。以下是详细步骤及相关的知识点: 1. **安装MyEclipse**: 首先确保已经安装了MyEclipse,这是一款功能丰富的Java EE...

    flex iframe 支持在flash中嵌套入html jsp asp php等

    flex iframe 支持在flash中嵌套入html jsp asp php等flex iframe 支持在flash中嵌套入html jsp asp php等flex iframe 支持在flash中嵌套入html jsp asp php等flex iframe 支持在flash中嵌套入html jsp asp php等flex...

Global site tag (gtag.js) - Google Analytics