使用jquery / JS预加载swf

时间:2010-08-07 19:50:43

标签: javascript jquery flash

我想在向用户展示SWF之前预先加载SWF。

SWF是动态的,我没有FLA文件。

如果可能,我很乐意使用Javascript或jquery来做。

6 个答案:

答案 0 :(得分:6)

查看swfjsPreLoader

  

这个预加载器接受一组资产(jpg,gif,png,swf)   喜欢预加载。在内部,它将创建一个flash应用程序   做预加载。您可以定义多个回调处理程序。所以   JavaScript可以知道何时加载所有资产或每个资产   加载资产包括SWF文件。

答案 1 :(得分:2)

我不知道你是否还在寻找答案,但现在就是。

  1. 在页面内创建两个div。给一个名为loading的ID,另一个id功能和隐藏功能。将您的Flash内容放入功能内部,并确保使用css display:none。
  2. 隐藏功能

    然后,在您的页面顶部,或者您执行加载的任何地方,请执行以下操作:

                $(document).load('/path/to/your.swf', function() {
                  $('#feature').slideDown(600);
                  $('#loader').slideUp(300);
                });
    

    你有它。 在装载内部,您可以放置​​其中一个快乐的小旋转轮图形。我确信你可以用回调做更复杂的事情,但这将完成预加载的工作。

    享受。

答案 2 :(得分:1)

您可以先通过ajax加载swf文件,然后将对象添加到dom 通过这种方式,浏览器将使用缓存,swf从缓存重新加载并立即就绪。

按照我所说的样本(我不能给你一个小提琴样本,因为你需要一个本地swf加载ajax)。
swfobject可以在“loadObject”函数中使用,以更好地配置swf对象 加载swf后调用“mySwfFunction”。如果不需要,可以将其删除。

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <title>Swf demo</title>
    <script type='text/javascript' src='http://code.jquery.com/jquery-1.8.2.js'></script>
    <style type='text/css'>
    </style>
    <script type='text/javascript'>
        $(window).load(function () {
            var loader = new 
    function () {

        var loadObject = function ($el, src, callback, width, height) {
            var d = document;
            var s = 'object';
            var obj = d.createElement(s);

            obj.type = 'application/x-shockwave-flash';
            if(width){
             obj.width = width.toString() + 'px';
            }
            obj.name = 'plugin';

            if(height){
             obj.height = height.toString() + 'px';
            }

            obj.data = src;
            $el[0].appendChild(obj);
        };


        this.loadSwf = function ($el, src, callback, width, height) {

          $.ajax({
            url: src,
            success: function (data) {
                loadObject($el, src, callback, width, height);
                if(callback) callback();
            },
            error: function (xhr) {
                //your error code
            }
          });

        };


        } ();

        var mySwfCallback = function()  {
            $('#mySwf').show();
        }

        var $el = $('#mySwf');
        var src = 'your_file_url.swf';
        loader.loadSwf($el, src, mySwfCallback, 300, 300);
    });
    </script>
</head>
<by>
    <div id='mySwf' style='display:none;' >
    </div>
</body>
</html> 

答案 3 :(得分:0)

你可以预加载整个页面吗?如果是这样,这是jQuery的一个想法:

http://www.gayadesign.com/scripts/queryLoader/

答案 4 :(得分:0)

我个人认为最好使用基于Flash的礼貌加载器,因为它可以低至5kb。它的代码不一定非常难以实现:

package
{
    import com.firestartermedia.lib.as3.utils.DisplayObjectUtil;

    import flash.display.Sprite;
    import flash.events.Event;

    [SWF( backgroundColor=0xFFFFFF, frameRate=30, height=400, width=600 )]

    public class AppLoader extends Sprite
    {
        public function AppLoader()
        {
            loaderInfo.addEventListener( Event.INIT, handleInit );
        }

        private function handleInit(e:Event):void
        {
            loaderInfo.removeEventListener( Event.INIT, handleInit );

            DisplayObjectUtil.loadMovie( 'App.swf', null, handleComplete );
        }

        private function handleComplete(e:Event):void
        {
            removeChild( loader );

            addChild( e.target.content );
        }
    }
}

这使用github上提供的DisplayObjectUtilhttps://github.com/ahmednuaman/as3

答案 5 :(得分:0)