在Flex框架中,可以在加载网站时使用自定义预加载器。
在Adobe docs中,如果在下载700毫秒后下载了不到一半的应用程序,则会指定'显示进度条[预加载器]。'
然而,我总是希望预加载器能够立即显示,因为我知道95%的用户是第一次访问者并且网站超过500kb。我不希望人们必须等待.7秒才能显示预加载器动画。
我认为理论上可以“修补”框架以消除这个.7秒限制。我没有时间弄清楚如何,而且我以前从未这样做过。
有人帮忙吗?
答案 0 :(得分:7)
您应该只扩展DownloadProgressBar,尝试以下代码。我以前用过这个,我发现了jesse warden网站click here 有关这方面的信息(在那里我发现了它,这是他的代码的缩减版本)
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;
public class Preloader extends DownloadProgressBar
{
/**
* The Flash 8 MovieClip embedded as a Class.
*/
[Embed(source="yourPreloaderFile.swf")]
private var FlashPreloaderSymbol:Class;
private var clip:MovieClip;
public function Preloader()
{
super();
clip = new FlashPreloaderSymbol();
addChild(clip);
}
public override function set preloader(preloader:Sprite):void
{
preloader.addEventListener( FlexEvent.INIT_COMPLETE , onFlexInitComplete );
centerPreloader();
}
private function centerPreloader():void
{
x = (stageWidth / 2) - (clip.width / 2);
y = (stageHeight / 2) - (clip.height / 2);
}
private function onFlexInitComplete( event:FlexEvent ):void
{
dispatchEvent( new Event( Event.COMPLETE ) );
}
protected override function showDisplayForDownloading(time : int, event : ProgressEvent) : Boolean {
return true;
}
}
}
之后只需将主应用程序标记中的preloader属性更改为Preloader类。
答案 1 :(得分:1)
这是在showDisplayForDownloading
函数的mx.preloaders :: DownloadProgressBar.as,第1205行。
旧学校猴子修补与AS3一起使用,但您可以编辑Flex源代码并自行编译一个新的framework.swc(显然很痛苦),或者只是将其包含在源路径中(源路径覆盖.swcs) ;或从DownloadProgressBar派生您自己的预加载器类,它只会覆盖showDisplayForDownloading
并返回true。
您可以在'%PROGRAMFILES%\ Adobe \ Flex Builder 3 [Plug-in] \ sdks \ 3.0.0 \ frameworks \ projects \ framework \ src'中找到框架源,然后找到包路径。如果您使用3.1或其他任何内容,请更改sdk版本。
答案 2 :(得分:0)
我猜这种延迟有两个原因:
当我需要确保立即显示预加载器时,我会创建一个小包装swf,其中只是预加载器并从那里加载主swf。
答案 3 :(得分:-1)
无法立即显示预加载器,因为在显示进度之前需要下载某些类。另一个替代方案是你可以在html中显示进度,当加载flash影片时它会显示在这里。