2010-08-07 15 views
10

Ich möchte die SWF-Datei vorab laden, bevor sie dem Benutzer angezeigt wird.swf mit jquery/JS laden

SWF sind dynamisch und ich habe nicht die FLA-Dateien.

Ich würde es gerne mit Javascript oder Jquery tun, wenn möglich.

+1

Könntest du die SWF in deinen eigenen Flash-Loader laden, der sich um das Vorladen kümmern wird und es nur anzeigen wird, wenn es fertig ist? Das Flash-Skript wäre einfach, ich kann dir helfen, wenn du willst. –

Antwort

0

Können Sie die gesamte Seite vorladen? Wenn dies der Fall hier ist eine Idee, mit jQuery:

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

+0

die Demo sieht gut aus. Aber ich kann die ganze Seite nicht laden. Ich würde Ihren QueryLoader wahrscheinlich in anderen Projekten verwenden. :) – keithics

+0

Können Sie den Flash in ein IFRAME einschließen und das vorladen? –

0

Ich persönlich denke, es ist am besten einen Flash-basierte höflichen Loader zu verwenden, da dies so wenig wie 5 kb sein. Der Code für es muss nicht so schwer sein, etwas entlang der Linien von:

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); 
     } 
    } 
} 

Dies nutzt die DisplayObjectUtil auf Github verfügbar: https://github.com/ahmednuaman/as3

2

Ich weiß nicht, ob Sie noch auf der Suche für Antworten, aber hier ist es.

  1. Erstellen Sie zwei Divs innerhalb Ihrer Seite. Geben Sie eine ID namens loading und eine andere die ID-Funktion und die Funktion ausblenden. Setzen Sie Ihren Flash-Inhalt in das Feature ein und vergewissern Sie sich, dass das Feature in css display ausgeblendet ist: none.

Dann am oberen Rand der Seite, oder wo auch immer Sie Ihre onload Sachen zu tun, dies tun:

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

Und dort haben Sie es. Innerhalb laden, können Sie eine dieser glücklichen kleinen Spinnrad Grafiken setzen. Ich bin sicher, es gibt komplexere Dinge, die Sie mit Callbacks machen können, aber das wird die Aufgabe des Vorladens erledigen.

Genießen.

6

Werfen Sie einen Blick auf swfjsPreLoader:

Diese preloader eine Reihe von Vermögenswerten akzeptiert (jpg, gif, png, swf) Sie würde vorzuladen mögen. Intern wird eine Flash-Applikation erstellt, die das Pre-Loading durchführt. Sie könnten mehrere Callback-Handler definieren. So JavaScript erfährt, wenn alle Assets geladen sind oder jeder einzelne Asset wird einschließlich SWF-Dateien geladen.

1

Sie können zuerst SWF-Datei über Ajax laden und dann Objekt zu Dom hinzufügen.
Auf diese Weise verwendet der Browser den Cache, swf wird aus dem Cache geladen und ist sofort bereit.

Folgen Sie einem Beispiel von dem, was ich sage (ich kann Ihnen keine Geige Probe geben, weil Sie eine lokale swf benötigen, um Ajax geladen zu werden).
swfobject kann in der "loadObject" -Funktion für eine bessere Konfiguration des swf-Objekts verwendet werden.
"mySwfFunction" wird aufgerufen, nachdem swf geladen wurde. Es kann entfernt werden, wenn es nicht benötigt wird.

<!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>