1

ここから BulkLoader クラスで画像ファイルをロードするスライドショーがあります。最初の画像が完全にロードされると、ステージに追加するために MovieClip コンテナーに追加されます。ボタンがクリックされた場合のみ、フルスクリーンで表示されます。

fullScreenButton.addEventListener(MouseEvent.CLICK, showFull);

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

最初から呼び出される別の関数 loadAllSlides() で 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);

そして、読み込みプロセス中:

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

画像が完全に読み込まれる前に fullScreenButton がクリックされない限り、これは正常に機能し、もちろん何も表示されません。画像がコンテナにロード/追加されるまで待つために showFull() を呼び出すボタン クリック イベントを取得するにはどうすればよいですか、または再度追加するにはどうすればよいですか? 可能な/最良のアプローチは何ですか?

fullScreenButton がクリックされたときにコンテナに画像を再度追加するカスタム イベント「firstImgAdd」をディスパッチしてみました。また、try/catch ブロックまたは単純な if 条件を使用しても機能しませんでした。つまり、画像が取得されません。ボタンのクリックが早すぎると、読み込みが完了した後にコンテナに追加されます。どんな助けでも大歓迎です、事前に感謝します

4

2 に答える 2

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);
}
于 2011-05-06T15:35:07.640 に答える
0

これはセキュリティ違反です。
ユーザーの操作なしでフルスクリーン モードをインスタンス化することはできません。

全画面表示をアクティブにする唯一の方法は、ユーザー インタラクション期間から直接行うことです。IE: マウス クリック
このように見てください。ハッカーは、ユーザーに広告を全画面表示で強制的に表示させ、ユーザーが全画面表示を閉じたために逃げ道がないようにします。ハッカーがダウンして、それを再び開くことができます。

ユーザーの操作なしで全画面表示にできる最も近い方法は、SWF を HTML ドキュメントのフル サイズに拡張することです。

バブルを破裂させて申し訳ありませんが、私自身もこれをハックしようとしました。全画面表示にするには、実際のユーザー クリック イベントがスタックに存在する必要があります。

于 2011-05-06T18:36:38.607 に答える