如何在加载Flash SWF时显示预览图像?

时间:2011-08-12 13:42:29

标签: image flash preview preloader

我的网站上有一些第三方Flash SWF,大小不超过100KB。例如Flash视频播放器“JWPlayer”SWF为98KB。

这对于宽带用户来说很好,但对于慢速拨号带宽访问者来说却不太好。例如,在40 kbits / s时,我们正在谈论下载20秒。

问题在于,在慢速连接上,所有访问者都看到的是静态白屏,因此关闭页面可能会认为它已经死了。如果我右键单击SWF要去的区域,Adobe Flash Player对象占用空间,但第三方SWF尚未完成加载。

我希望网站访问者能看到加载微调器GIF或类似内容。

不幸的是,第三方SWF都没有“preloader”元素。它们不是开源的,所以我不能为它们添加预加载器。

所以,我的问题是......

在加载SWF时,有没有办法显示加载图像,尤其是GIF动画?

例如,有没有办法强制Adobe Flash Player在SWF中加载时显示图像?

我没有任何Flash编码技能,因此不包括在SWF中创建额外的SWF或SWF的解决方案可能对我来说不是最好的,但可能值得添加到帖子中其他人有类似的问题。

我正在使用swfobject 2.2嵌入SWF,所以考虑到这一点或者至少不会破坏SWF的解决方案会有所帮助。

非常感谢您花时间阅读我的帖子,即使您无法提供帮助。

戴夫

2 个答案:

答案 0 :(得分:0)

在不知道你使用哪个第三方swfs的情况下,这可能很难,但这里有几点需要考虑:

一种方法是隐藏swf(或swf所在的div)直到它被加载,然后在它完成后显示它。您可以在平均时间内将旋转器/加载图像放在其中。也就是说,你真正需要的是一个javascript函数,一旦加载完成就会被调用。一旦发生这种情况,您可以将jQuery分别用于.show().hide()您的微调器和swf。

JWPlayer有一些events that you can make use of。看起来onReady可以帮到你。

至于其他第三方swfs,我会查看他们的文档以寻找类似的javascript回调。我知道swfobject has an onLoad callback,以及其他一些嵌入式解决方案,例如Swiff,假设您可以使用它们。

祝你好运!

编辑:当swf成功嵌入不一定已加载时,可能会调用swfobject的回调。你最好的选择是玩这个并看看它是否有效 - 或者尽可能使用第三方swf的回调函数。

编辑2:这是一个Flash加载器示例。

import flash.net.URLRequest;
import flash.display.Loader;
import flash.events.Event;

function startLoad() {
    var mLoader:Loader = new Loader();
    var mRequest:URLRequest = new URLRequest("url-to-your-swf.swf");
    mLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteHandler);
    mLoader.load(mRequest);
}

function onCompleteHandler(loadEvent:Event){
    addChild(loadEvent.currentTarget.content);
    //Here's where you specify your js function
    ExternalInterface.call("flashLoaded"); // <-- where 'flashloaded' is a js function

}

startLoad();

答案 1 :(得分:0)

最后我们决定采用混合设置:

对于带宽较低的用户,我们将flash参数wmode设置为“transparent”,并将gif设置为背景图像(没有加载微调器,这些低带宽用户认为页面无效)。

但是,使用wmode = transparent会产生负面影响,因为Flash不会使用硬件加速。但对于我们的低带宽用户,例如比特率。我们的视频足够低,在大多数情况下,它们并不真正需要硬件加速。

对于高带宽用户,我们提供例如更高比特率的视频,因此硬件加速变得更加重要。对于这些用户,我们使用wmode = direct,并且没有加载微调器GIF,因为无论如何SWF加载得足够快。

由于我们的SWF文件及其XML文件的大小也必须加载,我们已经限制了1兆比特的带宽,如果用户拥有更高的带宽,我们就不会使用加载图形,反之亦然。其他人可能会发现其他级别更合适。

我们希望能够在可能的情况下将带宽限制设置得更低,就像在旧PC上我们可以使用384 kbit / s的一些Harware加速视频一样,但是删除用户的加载微调器像这样的低带宽意味着他们等待太长时间没有在屏幕上开心,这看起来比在视频播放期间丢失几帧更糟糕。

这是Adobe对各种wmodes的描述以及不同浏览器如何处理它们的链接。

http://kb2.adobe.com/cps/127/tn_12701.html#main_BrowserSupportForWmodes

希望有一天能帮到别人。

戴夫