Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image 如何在加载Flash SWF时显示预览图像?_Image_Flash_Preview_Preloader - Fatal编程技术网

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

Image 如何在加载Flash SWF时显示预览图像?,image,flash,preview,preloader,Image,Flash,Preview,Preloader,我的网站上有一些第三方Flash主权财富基金,大小可达100KB。e、 g.Flash视频播放器“JWPlayer”的SWF为98KB 这对宽带用户来说很好,但对拨号带宽较慢的访问者来说就不太好了。e、 以40kbits/s的速度,我们需要20秒的下载时间 问题是,在连接速度较慢的情况下,所有访问者看到的都是一个静态的白色屏幕,因此可能会认为页面已关闭而关闭页面。如果我右键单击SWF要进入的区域,则一个Adobe Flash Player对象正在占用该空间,但第三方SWF尚未完成加载 我希望网站

我的网站上有一些第三方Flash主权财富基金,大小可达100KB。e、 g.Flash视频播放器“JWPlayer”的SWF为98KB

这对宽带用户来说很好,但对拨号带宽较慢的访问者来说就不太好了。e、 以40kbits/s的速度,我们需要20秒的下载时间

问题是,在连接速度较慢的情况下,所有访问者看到的都是一个静态的白色屏幕,因此可能会认为页面已关闭而关闭页面。如果我右键单击SWF要进入的区域,则一个Adobe Flash Player对象正在占用该空间,但第三方SWF尚未完成加载

我希望网站访问者看到一个加载旋转GIF或类似的东西

不幸的是,没有第三方主权财富基金有“预加载”元素。而且它们不是开源的,所以我不能给它们添加预加载程序

所以,我的问题是

在SWF加载时,有没有办法显示加载的图像(最好是GIF动画)

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

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

我正在使用SWFObject2.2来嵌入SWF,因此一个考虑到这一点或至少不会破坏这一点的解决方案会有所帮助

非常感谢你花时间阅读我的帖子,即使你帮不上忙


Dave

在不知道您使用的是哪种第三方主权财富基金的情况下,这可能会很困难,但有几件事需要考虑:

一种方法是隐藏swf(或swf所在的div),直到加载完毕,然后在完成后显示。您可以同时在其位置放置一个微调器/加载图像。也就是说,您真正需要的是一个javascript函数,该函数在加载完成后被调用。一旦发生这种情况,您可以使用jQuery分别
.show()
.hide()
微调器和swf

JWPlayer有一些功能。看起来,
onReady
可以帮你解决这个问题

至于其他第三方主权财富基金,我会查看它们的文档,寻找类似的javascript回调。我知道,和其他一些嵌入式解决方案一样,假设您可以使用它们

祝你好运

编辑:当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();
导入flash.net.URLRequest;
导入flash.display.Loader;
导入flash.events.Event;
函数startLoad(){
var mLoader:Loader=new Loader();
var mRequest:URLRequest=newurlrequest(“指向您的swf.swf的url”);
mLoader.contentLoaderInfo.addEventListener(Event.COMPLETE,onCompleteHandler);
mLoader.load(mRequest);
}
函数onCompleteHandler(loadEvent:Event){
addChild(loadEvent.currentTarget.content);
//这里是指定js函数的地方

ExternalInterface.call(“flashLoaded”);//最后,我们决定采用混合设置:

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

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

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

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

如果可能的话,我们更希望能够将带宽限制设置得更低,就像在旧电脑上一样,我们可以使用一些384 kbit/s的视频硬件加速,但是删除低带宽用户的加载微调器意味着他们在屏幕上等待的时间太长,而这似乎比丢失一个fe更糟糕视频播放过程中的w帧

下面是Adobe对各种WMODE的描述以及不同浏览器如何处理它们的链接

希望有一天这能帮助别人


Dave

我考虑过使用jquery在Flash对象前面添加一个CSS z索引的图像,然后在加载SWF后使用swfobject callback函数将其删除。我过去这样做是为了在SWF前面放置一个徽标。但这涉及到玩“wmode”flash对象的参数,&有一些问题可能与flash和wmode参数有关,也可能尚未解决。我不记得问题是否与flash版本或浏览器有关,但这足以阻止我使用此方法。嗨,Chazbot。我同意你的建议。首先,你的编辑似乎正确。它似乎只要在页面上创建对象(其中包含Adobe Flash Player),swfobject启动其callbackFunction。也就是说,它在swf加载之前启动,因此我无法使用此callbackFunction。因此,我设法为每个第三方swf找到onReady事件,并尝试了这些。不幸的是,似乎使用jquery的hide()函数,本质上是一个CSS显示:none,结果表明这会停止或阻止flash对象