as3等到图像加载按钮单击

问题描述:

我有一个幻灯片,加载图像文件与BulkLoader类从here。当第一图像被完全加载时,它被添加到MovieClip容器以将其添加到阶段..和它被全屏显示,但是只有当一个按钮被点击:as3等到图像加载按钮单击

fullScreenButton.addEventListener(MouseEvent.CLICK, showFull); 

function showFull(e:MouseEvent):void { 
    stage.addChild(mcSlideHolder); 
    ... 
} 

加载的图像与在BulkLoader

imageLoader = new BulkLoader("imgLoader"); 
imageLoader.add(new URLRequest(paths[0]), {id:"slide_0});         
imageLoader.get("slide_0).addEventListener(Event.COMPLETE, onFirstSlideLoaded); 
imageLoader.start(1); 

,并在加载过程:即得到从一开始就被称为一个单独的函数loadAllSlides()

function onFirstSlideLoaded(e:Event):void 
{ 
    firstImage = imageLoader.getBitmap(e.currentTarget.id); 
    currentImage.addChild(firstImage); 
    mcSlideHolder.addChild(currentImage); 
    mcSlideHolder.dispatchEvent(new Event("firstImgAdd")); 
} 

这工作得很好,除非fullScree在图像完全加载之前单击nButton,当然没有任何可见的东西。如何获得调用showFull()的按钮单击事件以等待图像加载/添加到容器,或者如何再次添加它?什么是可能/最好的方法?

我试着调度自定义事件“firstImgAdd”,当点击fullScreenButton时,再次将图像添加到容器,以及try/catch块或甚至简单的if条件,但它们都不起作用,这意味着当点击按钮过早时,图像在加载完成后不会被添加到容器中。 任何帮助表示感谢,提前致谢

+1

您能澄清一点:您是否在谈论Flash Player的实际全屏模式?从你展示的代码中,我无法想象为什么你不会点击按钮去全屏显示,然后在加载完成后看到图像出现(弹出)。您是否在点击后问如何推迟全屏?如果是这样,你不能那样做。 Flash Player的安全性限制要求全屏呼叫在调用堆栈中有一个mouseEvent或keyboardEvent处理程序。 – 2011-05-06 15:11:40

+1

是的,当然:是的,它是关于Flash的实际全屏模式。我用“stage.displayState = StageDisplayState.FULL_SCREEN;”调用全屏模式之后,现在添加了mcSlideHolder的代码。但仍然没有成功。不,我不想推迟全屏,只是等待图像(在后台加载)完成加载并将其添加到舞台上以便可见 – hajn 2011-05-06 17:32:29

可能最好的事情是使该按钮不可用或禁用,直到加载完成。另一种选择可能是在负载未完成时提示请求。

喜欢的东西:

private var slideLoaded:Boolean = false; 
private var requestCued:Boolean = false; 

imageLoader = new BulkLoader("imgLoader"); 
imageLoader.add(new URLRequest(paths[0]), {id:"slide_0"});         
imageLoader.get("slide_0").addEventListener(Event.COMPLETE, onFirstSlideLoaded); 
imageLoader.start(1); 

fullScreenButton.addEventListener(MouseEvent.CLICK, showFull); 

function showFull(e:MouseEvent):void { 
    if (slideLoaded) 
     stage.addChild(mcSlideHolder); 
    else 
     requestCued = true; 
} 

function onFirstSlideLoaded(e:Event):void { 
    slideLoaded = true; 
    firstImage = imageLoader.getBitmap(e.currentTarget.id); 
    currentImage.addChild(firstImage); 
    mcSlideHolder.addChild(currentImage); 
    if (requestCued) 
     stage.addChild(mcSlideHolder); 
} 
+0

禁用按钮直到图像加载是一个选项(和工作),但不是我的首选,考虑到用户体验:取决于用户的互联网连接速度和文件大小,它可能需要一段时间,直到负载完成..它可能更好地启用按钮,并显示某种等待圈/动画,直到图像可以显示。 – hajn 2011-05-17 06:37:34

这是一个安全的侵犯。
您无法在没有用户交互的情况下实例化全屏模式。

只有这样才能激活全屏幕是直接从用户交互period.IE:a鼠标点击
看它这样,任何一个黑客试图强迫用户观看其广告全屏幕,而不是有办法因为用户关闭全屏幕黑客可能会重新打开它。

在没有用户交互的情况下,最接近全屏的方式是将SWF扩展为HTML文档的完整大小。

对不起,你的泡沫破裂我自己试图绕过这个也。实际的用户点击事件必须放在堆栈中,以便您能够全屏显示

+0

不,这不是问题。我知道所需的用户交互前全屏。我只有在单击按钮时才激活全屏模式,但我的问题是在完全加载图像之前单击全屏按钮时图像不可见。 – hajn 2011-05-08 08:34:19