Патч флекс фреймворка для мгновенного показа прелоадера? - PullRequest
2 голосов
/ 26 сентября 2008

Во фреймворке Flex можно использовать пользовательский предварительный загрузчик во время загрузки сайта.

В Adobe docs указано, что ' отображается индикатор выполнения [preloader], если после 700 миллисекунд загрузки загружено менее половины приложения. '

Однако я ВСЕГДА хочу, чтобы предварительный загрузчик появлялся мгновенно, поскольку я знаю, что 95% наших пользователей - это посетители, впервые посещающие сайт, и размер сайта превышает 500 КБ. Я не хочу, чтобы люди ждали 0,7 секунды до появления анимации предзагрузчика.

Я бы теоретически подумал, что можно «обезьяньим патчем» каркас, чтобы убрать это .7 второе ограничение. У меня нет времени, чтобы понять, как, и я никогда не делал этого раньше.

Кто-нибудь поможет?

Ответы [ 4 ]

7 голосов
/ 26 сентября 2008

Вы должны просто расширить DownloadProgressBar, попробуйте следующий код. Я использовал это раньше, и я нашел сайт начальника Джесси нажмите здесь полезная информация об этом (где я узнал об этом, и это сокращенная версия его кода)

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 голос
/ 26 сентября 2008

Это в mx.preloaders :: DownloadProgressBar.as, строка 1205 в функции showDisplayForDownloading.

Исправление старых обезьян в старой школе отсутствует в AS3, но вы можете либо отредактировать исходный код Flex и скомпилировать себе новый framework.swc (очевидно, боль), либо просто включить его в исходный путь (исходные пути переопределяют .swcs) ; или выведите свой собственный класс preloader из DownloadProgressBar, который просто переопределяет showDisplayForDownloading и возвращает true.

Вы можете найти источник фреймворка в '% PROGRAMFILES% \ Adobe \ Flex Builder 3 [Plug-in] \ sdks \ 3.0.0 \ frameworks \ projects \ framework \ src', а затем путь к пакету. Измените версию SDK, если вы используете 3.1 или любую другую.

0 голосов
/ 15 апреля 2009

Невозможно сразу запустить предварительный загрузчик, так как некоторые классы необходимо загрузить, прежде чем можно будет отображать прогресс. другая альтернатива может заключаться в том, что вы отображаете прогресс в html, и когда загружается флэш-фильм, он отображается, но здесь.

0 голосов
/ 26 сентября 2008

Я предполагаю, что задержка существует по двум причинам:

  1. Вы не хотите, чтобы preloader "мигать", когда страница уже кэшированный
  2. Сам предзагрузчик должен нагрузка

Когда мне нужно убедиться, что предварительный загрузчик отображается мгновенно, я делаю небольшой swf-обертку, которая имеет просто предварительный загрузчик, и загружаю основной swf оттуда.

...