2

In the Flex framework a custom preloader can be used while the site is loading.

In the Adobe docs it specifies that 'the progress bar [preloader] is displayed if less than half of the application is downloaded after 700 milliseconds of downloading.'

However I ALWAYS want the preloader to appear instantly since I know that 95% of our users are first time visitors and the site is over 500kb. I dont want people to have to wait .7 seconds for the preloader animation to appear.

I would think in theory that it is possible to 'monkey patch' the framework to remove this .7 second limitation. I dont have time to figure out how, and I've never done it before.

Anybody help?

4

4 回答 4

7

您应该只扩展 DownloadProgressBar,尝试以下代码。我以前用过这个,我发现 jessewarden 网站 点击这里有用的信息(我在那里发现了它,这是他的代码的精简版)

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 类。

于 2008-09-26T09:01:58.113 回答
1

这是在showDisplayForDownloading函数中的 mx.preloaders::DownloadProgressBar.as 的第 1205 行中。

旧式猴子补丁已在 AS3 中推出,但您可以编辑 Flex 源代码并自己编译一个新的 framework.swc(显然很痛苦),或者只是将其包含在源路径中(源路径覆盖 .swcs);或从仅覆盖showDisplayForDownloading并返回 true 的 DownloadProgressBar 派生您自己的预加载器类。

您可以在 '%PROGRAMFILES%\Adobe\Flex Builder 3[ Plug-in]\sdks\3.0.0\frameworks\projects\framework\src' 中找到框架源,然后是包路径。如果您使用的是 3.1 或其他版本,请更改 sdk 版本。

于 2008-09-26T08:09:34.167 回答
0

我猜延迟有两个原因:

  1. 一旦页面已经缓存,您不希望预加载器“闪烁”
  2. 预加载器本身必须加载

当我需要确保立即显示预加载器时,我会制作一个只有预加载器的小型包装 swf,然后从那里加载主 swf。

于 2008-09-26T11:09:40.647 回答
-1

它不可能使预加载器立即显示,因为在显示进度之前需要下载一些类。其他选择可以是您在 html 中显示进度,当加载 flash 电影时,它会显示在此处。

于 2009-04-15T10:41:19.487 回答