Последовательная загрузка SWF-файлов по таймеру или загрузка следующего по завершении. Возможный? - PullRequest
2 голосов
/ 19 февраля 2010

У меня есть страница, которая загружает множество SWFS *. Я загружаю их все одновременно, последовательно замедляя анимацию вступления. Есть ли способ загрузить SWF-файлы последовательно? Или если не загружать их по таймеру (я думаю, что полсекунды сделают трюк)

* существует множество динамически генерируемых Flex-графиков, поэтому невозможно объединить их все в один.

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

Ответы [ 2 ]

2 голосов
/ 19 февраля 2010

Если у вас нет доступа к .flas, вот несколько вещей, которые можно попробовать

swfobject.embedSWF принимает в качестве последнего параметра функцию обратного вызова, которая вызывается при успехе или неудаче документы1005 *.Я не знаю, вызывается ли это только тогда, когда SWF полностью загружен, но если это так, вы можете использовать его следующим образом:

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

Если это не работает, и вы хотите отложить встраиваниекаждый swf вы можете сделать что-то очень похожее

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 голосов
/ 19 февраля 2010

Да, это возможно.

Самый простой способ - включить команду загрузки для следующего SWF-файла в последнем кадре последнего SWF-файла - показано ниже.

SWF 1 <------------------ |> Загрузить SWF 2

SWF 2 <------------------ |> Загрузить SWF 3

SWF 3 ...

Используйте что-то вроде:

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