2

我有一个加载大量 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 );
                };
4

2 回答 2

2

如果您无权访问 .flas,可以尝试以下方法

swfobject.embedSWF将在成功或失败文档上调用的回调函数作为其最后一个参数。我不知道这是否仅在 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
})();
于 2010-02-19T13:58:17.937 回答
0

对的,这是可能的。

最简单的方法是在最后一个 swf 的最后一帧中包含下一个 swf 的加载命令 - 如下所示。

SWF 1 <------------------|> 加载 SWF 2

SWF 2 <------------------|> 加载 SWF 3

瑞士法郎 3 ...

使用类似的东西:

_root.YourPlaceholderMC.loadMovie("YourSecondMovie .swf");
于 2010-02-19T13:34:10.130 回答