0

ルートmx:Applicationを持つflex3プロジェクトがあります。アプリケーションにはユーザーが選択できるいくつかのサイズがあるため、幅と高さはpct値に設定されます。そのため、埋め込みのwidth属性に正しいサイズが設定されます。

その属性の値にアクセスする方法を理解しようとしています。this.root.loaderInfo.widthがその値を与えるはずだといくつかの場所で読みましたが、常に500を返します。これは、デフォルトのアプリケーションコンテナの幅に由来すると推測しています(http://help.adobe.com/en_US/を参照)。 flex / using / WS2db454920e96a9e51e63e3d11c0bf62d75-7fff.html)。

flashvarとして渡すことができると思いますが、プロジェクトの性質上、この場合は適切な解決策ではありません。いくつか例を挙げると、Application.application.width、stage.width、stage.stageWidthも試しました。これらの値はブラウザのズームレベルに基づいて変化するため、これらの値に依存することはできません。

私が本当に必要としているのは、埋め込みの幅属性です。提案?

ご協力いただきありがとうございます。

4

2 に答える 2

1

によって返される幅は、SWFのスケール モードstage.stageWidth設定によって異なります。Flex が使用する は、コンテナーのサイズを返します。埋め込みサイズとブラウザーのズーム レベルの両方の影響を受けます。stage.scaleMode = StageScaleMode.NO_SCALE;

を他の値stage.scaleModeに設定すると、SWF 内で定義された寸法が返され、常に同じ値が返されます。そして、あなたが言及したようにloaderInfo.width、スケールモードや埋め込み寸法に関係なく、SWF で設定された寸法を返します。残念ながら、埋め込みサイズの影響を受ける設定はありませんが、ブラウザのズーム レベルには影響しません。

ブラウザーのズーム レベルに関係なく、コンテナーの寸法を見つける唯一の方法は、埋め込みコードでパラメーターとして渡すか、ExternalInterfacewvxvw の言及のように を使用することです。さまざまなレイアウトから選択しているので、コンテナーのサイズに基づいて暗黙的に選択するのではなく、設定を行うのが適切です。または、特定の値ではなく、寸法/縦横比の範囲に基づいてレイアウトを選択することもできます。

于 2012-04-04T17:19:11.143 に答える
0

外部インターフェイスを使用する必要がありました。js 埋め込みファイルに追加した js は次のとおりです。

function getSwfDimensions() {
    var swf = document.getElementById('myMovie');
    sendSwfDimensions({width:swf.width, height:swf.height});
}
function sendSwfDimensions(d) {
    thisMovie("myMovie").sendToActionScript(d);
}
function thisMovie(movieName) {
    if (navigator.appName.indexOf("Microsoft") != -1) {
        return window[movieName];
    } else {
        return document[movieName];
    }
}

そしてフラッシュで:

private function getSwfDimensions():void {
    ExternalInterface.addCallback("sendToActionScript", swfDimensionsReceived);
    ExternalInterface.call("getSwfDimensions"); 
}
public function swfDimensionsReceived(d):void {
    //set the width and height
    this._width = this.width = d.width;
    this._height = this.height = d.height;
    //set up a listener to handle browser zoom changes
    this.stage.addEventListener(Event.RESIZE, onStageResize);
}
于 2012-04-06T13:34:38.137 に答える