【问题标题】:Patch flex framework to show preloader instantly?修补 flex 框架以立即显示预加载器?
【发布时间】:2008-09-26 07:46:59
【问题描述】:

在 Flex 框架中,可以在网站加载时使用自定义预加载器。

Adobe docs 中指定'如果在下载 700 毫秒后下载不到一半的应用程序,则显示进度条 [preloader]。'

但是我总是希望预加载器立即出现,因为我知道我们 95% 的用户是首次访问者并且网站超过 500kb。我不希望人们必须等待 0.7 秒才能显示预加载器动画。

我认为理论上可以对框架进行“猴子补丁”以消除这个 0.7 秒的限制。我没有时间弄清楚如何做,而且我以前从未这样做过。

有人帮忙吗?

【问题讨论】:

    标签: apache-flex preloader monkeypatching


    【解决方案1】:

    你应该只扩展 DownloadProgressBar,试试下面的代码。我以前用过这个,我找到了 jessewarden 网站click here usful 了解这方面的信息(我在那里发现了它,这是他代码的精简版)

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

    【讨论】:

      【解决方案2】:

      这在 mx.preloaders::DownloadProgressBar.as 中,showDisplayForDownloading 函数的第 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 版本。

      【讨论】:

      • 我建议只对 DownloadProgressBar 类进行子类化。
      【解决方案3】:

      我猜延迟有两个原因:

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

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

      【讨论】:

        【解决方案4】:

        不可能让预加载器立即显示,因为某些类需要下载才能显示进度。另一种选择是您在 html 中显示进度,当加载 flash 电影时,它会显示在此处。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-02-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-05-03
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多