从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 ) );
}
}
}
分享到:
相关推荐
在IT行业中,创建一个交互式的相册查看器是常见的需求,尤其在网页设计和开发中。这个主题“css+js打造的相册查看器”涵盖了使用CSS(层叠样式表)和JavaScript技术来构建这样一个功能丰富的组件。接下来,我们将...
微信小程序 vant 组件库是基于 Vue.js 构建的一套高度可定制化的 UI 组件集,专为微信小程序...在实际项目中,结合 vant 的文档和示例,可以轻松地根据需求进行组件选择和定制,打造出符合业务需求的高质量小程序应用。
在网页设计和开发中,按钮(Button)是一个至关重要的元素,它用于引导用户进行交互,如点击提交表单、打开新页面或触发某些功能。"图文按钮"是一种结合了图像和文字的按钮,通常用于增强视觉吸引力并清晰传达按钮的...
《有赞小程序UI库在百度小程序中的应用与实践》 有赞是一家专注于电商解决方案的公司,其提供的有赞小程序UI库 vantui-baiapp-master 是专门为开发者设计的,旨在简化百度小程序开发过程,提高用户体验。这个UI库...
在阅读这份文档时,开发者应重点了解每个组件的属性、事件和方法,以及如何在实际项目中正确使用它们。此外,文档通常还会包含示例代码和注意事项,帮助开发者避免常见错误,提高开发效率。 通过深入学习并熟练掌握...
总结,UView内置类是uni-app开发中的强大工具,通过深入理解和实践"uniapp-demo-uview"中的示例,开发者可以掌握其精髓,提升项目开发效率,打造出高质量的移动应用。在学习过程中,不断探索和实践,将使你在uni-app...