2011-05-06 15 views
1

我有一個幻燈片,加載圖像文件與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

回答

1

可能最好的事情是使該按鈕不可用或禁用,直到加載完成。另一種選擇可能是在負載未完成時提示請求。

喜歡的東西:

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

0

這是一個安全的侵犯。
您無法在沒有用戶交互的情況下實例化全屏模式。

只有這樣才能激活全屏幕是直接從用戶交互period.IE:a鼠標點擊
看它這樣,任何一個黑客試圖強迫用戶觀看其廣告全屏幕,而不是有辦法因爲用戶關閉全屏幕黑客可能會重新打開它。

在沒有用戶交互的情況下,最接近全屏的方式是將SWF擴展爲HTML文檔的完整大小。

對不起,你的泡沫破裂我自己試圖繞過這個也。實際的用戶點擊事件必須放在堆棧中,以便您能夠全屏顯示

+0

不,這不是問題。我知道所需的用戶交互前全屏。我只有在單擊按鈕時才激活全屏模式,但我的問題是在完全加載圖像之前單擊全屏按鈕時圖像不可見。 – hajn 2011-05-08 08:34:19