`
shlei
  • 浏览: 287929 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Flex 预加载特效实例

    博客分类:
  • FLEX
阅读更多
这个预加载特效没有经过严格测试及通用性测试,它仅在firefox及mac中测试通过。

这个组件显示了一个application(应用)最后一次shut down的画面快照,该组件通过编辑器自动生成的HTML文件来调用onBeforeUnload。当application shut down后,它保存了application的state及画面快照在本地共享变量中(SharedObject),当下一次应用启动的时候,它抓取该快照并正确显示,所以它显示的非常快,也就意味着当你的主文件还未下载完毕,它就已经可以看见界面了。
<?xml version="1.0" encoding="utf-8"?>
<!-- http://www.myflexhero.com/share/flex-hero-flex4/578 -->
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" 
			   preloader="SnapShotPreloader" initialize="setup()" >
	<fx:Script>
		<![CDATA[
			import mx.events.SandboxMouseEvent;
 
			private function setup():void
			{
				ExternalInterface.addCallback("onBeforeUnload", onBeforeUnload);
				var so:SharedObject = SharedObject.getLocal("preloaderImage");
				if (so.data.listSelectedIndex)
					list1.selectedIndex = so.data.listSelectedIndex;
				if (so.data.bbSelectedIndex)
					bb.selectedIndex = so.data.bbSelectedIndex;
				if (so.data.taText)
					ta.text = so.data.taText;
				if (so.data.padData)
				{
					display.graphics.lineStyle(1, 0);
					var commands:String  = so.data.padData;
					var arr:Array = commands.split(",");
					var n:int = arr.length;
					for (var i:int = 0; i < n; i++)
					{
						var cmd:String = arr[i];
						var args:Array = cmd.split(" ");
						switch (args[0])
						{
							case "M":
								display.graphics.moveTo(args[1], args[2]);
								break;
							case "L":
								display.graphics.lineTo(args[1], args[2]);
								break;
						}
					}
				}
			}
			private function onBeforeUnload():void
			{
				var bmd:BitmapData = new BitmapData(width, height);
				bmd.draw(this);
				var ba:ByteArray = bmd.getPixels(new Rectangle(0, 0, width, height));
				ba.compress();
				var so:SharedObject = SharedObject.getLocal("preloaderImage");
				so.data.preloaderImage = ba;
				so.data.width = width;
				so.data.height = height;
				so.data.listSelectedIndex = list1.selectedIndex;
				so.data.bbSelectedIndex = bb.selectedIndex;
				so.data.taText = ta.text;
				so.data.padData = drawCommands.join(",");
			}
 
			override protected function commitProperties():void
			{
				super.commitProperties();
				var t:Number = getTimer();
				while (getTimer() - t < 1000);
			}
 
			override protected function measure():void
			{
				super.measure();
				var t:Number = getTimer();
				while (getTimer() - t < 1000);
			}
 
			override protected function updateDisplayList(w:Number, h:Number):void
			{
				super.updateDisplayList(w, h);
				var t:Number = getTimer();
				while (getTimer() - t < 1000);
			}
 
			private var drawCommands:Array = [];
			private var mouseIsDown:Boolean;
			private function pad_mouseDownHandler(event:MouseEvent):void
			{
				mouseIsDown = true;
				display.graphics.lineStyle(1, 0);
				display.graphics.moveTo(event.localX, event.localY);
				drawCommands.push("M " + event.localX + " " + event.localY);
				systemManager.getSandboxRoot().addEventListener(MouseEvent.MOUSE_UP, pad_mouseUpHandler);
				systemManager.getSandboxRoot().addEventListener(SandboxMouseEvent.MOUSE_UP_SOMEWHERE, pad_mouseUpHandler);
				pad.addEventListener(MouseEvent.MOUSE_MOVE, pad_mouseMoveHandler);                
			}
			private function pad_mouseUpHandler(event:MouseEvent):void
			{
				systemManager.getSandboxRoot().removeEventListener(MouseEvent.MOUSE_UP, pad_mouseUpHandler);
				systemManager.getSandboxRoot().removeEventListener(SandboxMouseEvent.MOUSE_UP_SOMEWHERE, pad_mouseUpHandler);
				pad.removeEventListener(MouseEvent.MOUSE_MOVE, pad_mouseMoveHandler);                
				mouseIsDown = false;
			}
			private function pad_mouseMoveHandler(event:MouseEvent):void
			{
				display.graphics.lineTo(event.localX, event.localY);
				drawCommands.push("L " + event.localX + " " + event.localY);
			}
		]]>
	</fx:Script>
	<s:Panel width="100%" height="100%" title="Big App" >
		<s:List id="list1">
			<s:dataProvider>
				<s:ArrayList>
					<fx:String>One</fx:String>
					<fx:String>Two</fx:String>
					<fx:String>Three</fx:String>
					<fx:String>Four</fx:String>
					<fx:String>Five</fx:String>
					<fx:String>Six</fx:String>
				</s:ArrayList>
			</s:dataProvider>
		</s:List>    
		<s:ButtonBar id="bb" x="200">
			<s:dataProvider>
				<s:ArrayList>
					<fx:String>One</fx:String>
					<fx:String>Two</fx:String>
					<fx:String>Three</fx:String>
					<fx:String>Four</fx:String>
				</s:ArrayList>
			</s:dataProvider>
		</s:ButtonBar>
		<s:Panel title="Scratch Pad" y="150" width="150" height="150" >
			<s:Button label="Clear" click="drawCommands.length = 0;display.graphics.clear()" />
			<s:Group id="pad" left="0" top="24" right="0" bottom="0"
					 mouseDown="pad_mouseDownHandler(event)" >
				<s:Rect left="0" right="0" top="0" bottom="0" >
					<s:fill>
						<s:SolidColor color="0xFDFDFD" />
					</s:fill>
				</s:Rect>
			</s:Group>
			<s:SpriteVisualElement id="display" left="0" top="24" right="0" bottom="0" />
		</s:Panel>
		<s:TextArea id="ta" x="200" y="150" width="200" height="150" />
	</s:Panel>
</s:Application>


个人觉得此实例的主要看点是使用了一些不常用的系统级类,有一定参考价值。当然若需要详细了解系统级类,直接参考API即可。

From http://www.myflexhero.com/share/flex-hero-flex4/flex-hero-components/flex-module/578
分享到:
评论
2 楼 shlei 2012-07-26  
xurichusheng 写道

出现下面的错误:

1172: 找不到定义 SnapShotPreloader。

1120: 访问的属性 SnapShotPreloader 未定义。

是转载的,可能当时没编译运行,不好意思,文章最下面附转载地址,看下,:)
1 楼 xurichusheng 2012-07-23  

出现下面的错误:

1172: 找不到定义 SnapShotPreloader。

1120: 访问的属性 SnapShotPreloader 未定义。

相关推荐

    Flex 预加载动画demo

    这个"Flex 预加载动画demo"是Flex应用中的一个实例,它展示了如何自定义预加载进度条动画,使得用户在等待应用程序加载时能有一个更友好的交互体验。 预加载是任何富媒体应用程序的关键部分,因为它确保了所有必要...

    flex预加载类

    很详细的实现了flex游戏的预加载,可以使用图片,也可以重绘技术,任你选择

    flex动态加载css实例

    "Flex动态加载CSS实例"就是一个这样的实践,它旨在解决在运行时按需加载CSS的问题,从而提高页面加载速度并降低初始加载时的带宽消耗。 Flex在这里可能指的是使用Flex布局(Flexible Box Layout),这是一种现代的...

    美丽的Flex Preloader控件,页面预加载效果

    美丽的Flex Preloader控件,页面预加载效果 美丽的Flex Preloader控件,页面预加载效果 美丽的Flex Preloader控件,页面预加载效果 美丽的Flex Preloader控件,页面预加载效果

    flex 自定义加载进度框

    在Flex应用中,"预加载器"(preloader)是程序启动时显示的一个组件,它的主要功能是在用户等待整个应用程序完全加载时提供反馈。预加载器通常会显示一个进度条,以指示应用程序资源的加载进度。 在“flex自定义...

    FLEX4动画特效

    标题“FLEX4动画特效”暗示了这个压缩包包含了一系列Flex4动画效果的示例代码。这些示例可能是由FlexBuilder4.6,一个专门用于Flex开发的集成开发环境(IDE),直接导出的工程。用户可以将这些工程导入到自己的开发...

    flex加载动态图片

    flexBulider页面加载动态图片的显示

    Flex翻书特效 OpenBook

    Flex翻书特效是一种在Web应用中模拟真实书籍翻页效果的技术,主要应用于电子图书、杂志或画册等在线阅读场景,能提供用户更加沉浸式的阅读体验。本文将深入探讨Flex翻书特效的相关知识点,包括Flex的基本概念、实现...

    flex 异步加载tree

    根据给定的信息,我们可以深入探讨Flex中的异步加载Tree组件的相关知识点。 ### 一、Flex与AsyncTree组件 #### 1. Flex简介 Flex是一种开源的框架,用于构建跨平台的桌面应用程序和移动应用程序。它提供了强大的...

    Flex中加载SWF方法

    Flex中加载SWF方法,介绍了flex 对 swf 加载和处理

    flex特殊效果实例

    4. **SWC文件**:SWC是Flex的库文件格式,包含预编译的ActionScript类和资源。如果在项目中缺少某些库,可以从提供的SWC文件中找到并导入,以确保项目的正常运行。 5. **特殊效果**:合集中的实例可能涵盖各种特殊...

    FLEX中文教程+实例

    本教程结合实例,旨在帮助初学者和开发者深入理解Flex的基本概念、语法以及实际应用。 一、Flex概述 Flex是基于Flash Player或Adobe AIR运行时环境的开发平台,它提供了丰富的用户界面组件库,使得开发者可以创建...

    flex 百度地图 实例下载

    在这个"flex 百度地图 实例下载"项目中,我们可以通过提供的压缩包文件"BaiduMap"来学习和实践如何在Flex中集成和使用百度地图API。以下是一些核心知识点: 1. **Flex基础知识**:首先,你需要了解Flex的基本架构,...

    flex官方经典实例

    在这个名为"flex官方经典实例"的压缩包中,我们可以找到两个文件:readMe.txt和CairngormStore,它们分别代表了Flex开发中的不同方面。 readMe.txt通常是一个包含项目介绍、使用指南或作者信息的文本文件。在Flex...

    Flex+Java登录实例完整框架 基于Flex框架

    Flex+Java登录实例完整框架是将 Adobe Flex 与 Java 技术结合,构建的一个功能完善的登录系统。这个框架主要用于创建富互联网应用程序(Rich Internet Applications,RIA),提供丰富的用户体验和强大的后端数据处理...

    flex 多个聊天实例

    标题“flex 多个聊天实例”表明这是一篇关于使用Adobe Flex技术实现多个聊天实例的教程或案例分享。Flex是一种开源的、基于ActionScript的框架,用于构建富互联网应用程序(RIA),尤其适合创建动态和交互式的Web...

    flex弹性盒子布局实例

    1. 灵活容器(Flex Container):一个使用了`display: flex`或`display: inline-flex`样式的元素,成为flex容器,它的所有直接子元素称为flex项目(Flex Items)。 2. 主轴(Main Axis)与侧轴(Cross Axis):主轴...

    flex+hibernate 实例

    在这个"Flex+Hibernate实例"中,ADC(ActionScript Data Services)可能被用来在Flex客户端和Hibernate驱动的服务器端之间传输数据。ADC提供了一种方式,使得Flex应用能够透明地访问由Hibernate管理的后端数据源。这...

    flex arcgis 加载天地图2.0地图源码

    在本案例中,我们将深入探讨如何使用Flex与ArcGIS结合,加载天地图2.0的地图源码。 天地图是由中国国家测绘局主导的国家级地理信息公共服务平台,提供丰富的测绘地理信息资源,包括地图、影像、地形、地名等。天...

Global site tag (gtag.js) - Google Analytics