2010-02-19 3 views
2

J'ai une page qui charge beaucoup de swfs *. Je les charge tous en même temps, séquentiellement ce qui ralentit l'animation de l'intro. Existe-t-il un moyen de charger les swfs de manière séquentielle? Ou si vous ne les chargez pas sur une minuterie (une demi-seconde ferait l'affaire je pense)Charger séquentiellement des fichiers SWF sur une minuterie ou charger une fois l'opération terminée. Possible?

* il ya beaucoup de différents graphiques Flex générés dynamiquement, donc il n'est pas possible de les avoir tous en un.

var swfs = [ 
        { url: '/swf/AllBookings.swf', id: "all_bookings", width: 620, height: 365, flashvars: {}, params: {}, attributes: {} }, 
        { url: '/swf/AllBookingsByHospital.swf', id: "all_bookings_by_hospital", width: 380, height: 240, flashvars: {}, params: {}, attributes: {} }, 
        { url: '/swf/AllBookingsByLanguage.swf', id: "all_bookings_by_language", width: 540, height: 240, flashvars: {}, params: {}, attributes: {} }, 
        { url: '/swf/DNAReason.swf', id: "dna_reason", width: 300, height: 240, flashvars: {}, params: {}, attributes: {} }, 
        { url: '/swf/DNAInterpreterLanguage.swf', id: "dna_interpreter_language", width: 300, height: 240, flashvars: {}, params: {}, attributes: {} }, 
        { url: '/swf/DNAPatientLanguage.swf', id: "dna_patient_language", width: 300, height: 240, flashvars: {}, params: {}, attributes: {} } 

       ]; 

       for (var i = 0; i < swfs.length; i++) { 
        swfobject.embedSWF(swfs[i].url, swfs[i].id, swfs[i].width, swfs[i].height, "9.0.0", false, swfs[i].flashvars, swfs[i].params, swfs[i].attributes); 
       }; 

Répondre

2

Si vous n'avez pas accès aux .flas ici est acouple de choses à essayer

swfobject.embedSWF prend comme dernier paramètre une fonction de rappel appelée succès ou échec docs. Je ne sais pas si cela est seulement appelé lorsque le swf est complètement chargé, mais si tel est le cas, vous pouvez l'utiliser comme ceci:

var swfs = [ 
    { url: '/swf/AllBookings.swf', id: "all_bookings", width: 620, height: 365, flashvars: {}, params: {}, attributes: {} }, 
    { url: '/swf/AllBookingsByHospital.swf', id: "all_bookings_by_hospital", width: 380, height: 240, flashvars: {}, params: {}, attributes: {} }, 
    { url: '/swf/AllBookingsByLanguage.swf', id: "all_bookings_by_language", width: 540, height: 240, flashvars: {}, params: {}, attributes: {} }, 
    { url: '/swf/DNAReason.swf', id: "dna_reason", width: 300, height: 240, flashvars: {}, params: {}, attributes: {} }, 
    { url: '/swf/DNAInterpreterLanguage.swf', id: "dna_interpreter_language", width: 300, height: 240, flashvars: {}, params: {}, attributes: {} }, 
    { url: '/swf/DNAPatientLanguage.swf', id: "dna_patient_language", width: 300, height: 240, flashvars: {}, params: {}, attributes: {} } 
]; 

(function() { 
    var swf = swfs.shift(); 
    if(!swf) return; 
    swfobject.embedSWF(
     swf.url, 
     swf.id, 
     swf.width, 
     swf.height, 
     "9.0.0", 
     false, 
     swf.flashvars, 
     swf.params, 
     swf.attributes, 
     arguments.callee //this function will be called again as a callback 
    ); 
})(); //calls itself automatically 

Si cela ne fonctionne pas et que vous voulez retarder l'intégration de chaque swf vous pouvez faire quelque chose de très similaire

var swfs = [ 
    { url: '/swf/AllBookings.swf', id: "all_bookings", width: 620, height: 365, flashvars: {}, params: {}, attributes: {} }, 
    { url: '/swf/AllBookingsByHospital.swf', id: "all_bookings_by_hospital", width: 380, height: 240, flashvars: {}, params: {}, attributes: {} }, 
    { url: '/swf/AllBookingsByLanguage.swf', id: "all_bookings_by_language", width: 540, height: 240, flashvars: {}, params: {}, attributes: {} }, 
    { url: '/swf/DNAReason.swf', id: "dna_reason", width: 300, height: 240, flashvars: {}, params: {}, attributes: {} }, 
    { url: '/swf/DNAInterpreterLanguage.swf', id: "dna_interpreter_language", width: 300, height: 240, flashvars: {}, params: {}, attributes: {} }, 
    { url: '/swf/DNAPatientLanguage.swf', id: "dna_patient_language", width: 300, height: 240, flashvars: {}, params: {}, attributes: {} } 
]; 

(function() { 
    var swf = swfs.shift(); 
    if(!swf) return; 
    swfobject.embedSWF(swf.url, swf.id, swf.width, swf.height, "9.0.0", false, swf.flashvars, swf.params, swf.attributes); 
    setTimeout(arguments.callee, 2000); //calls this function again after 2 seconds 
})(); 
0

Oui c'est possible.

Le moyen le plus simple est d'inclure la commande de chargement pour le swf suivant sur la dernière trame du dernier swf - illustré ci-dessous.

SWF 1 < ------------------ |> SWF charge 2

SWF 2 < ------------- ----- |> SWF charge 3

SWF 3 ...

Utilisez quelque chose comme:

_root.YourPlaceholderMC.loadMovie("YourSecondMovie .swf"); 
Questions connexes