0

我有一个带有根 mx:Application 的 flex 3 项目。宽度和高度设置为 pct 值,因为应用程序有多种尺寸可供用户选择,因此在嵌入的宽度属性上设置了正确的尺寸。

我试图弄清楚如何访问该属性中的值。我在几个地方读到 this.root.loaderInfo.width 应该给我这个值,但它总是返回 500,我猜它来自默认的应用程序容器宽度(参见http://help.adobe.com/en_US/弹性/使用/WS2db454920e96a9e51e63e3d11c0bf62d75-7fff.html)。

我意识到我可以将它作为 flashvar 传递,但由于项目的性质,在这种情况下这不是一个好的解决方案。我还尝试过 Application.application.width、stage.width 和 stage.stageWidth 等等。我不能依赖任何这些值,因为它们会根据浏览器缩放级别而变化。

我真正需要的是嵌入的宽度属性。建议?

谢谢你的帮助。

4

2 回答 2

1

返回的宽度stage.stageWidth取决于 SWF 的缩放模式设置。stage.scaleMode = StageScaleMode.NO_SCALE;Flex 使用的,返回容器的大小。它受嵌入大小和浏览器缩放级别的影响。

如果stage.scaleMode设置为其他任何值,它将返回 SWF 中定义的尺寸,始终返回相同的值。并且,正如您所提到的,loaderInfo.width返回 SWF 中设置的尺寸,无论缩放模式或嵌入尺寸如何。不幸的是,没有设置使其受嵌入大小的影响,但不受浏览器缩放级别的影响。

无论浏览器缩放级别如何,找到容器尺寸的唯一方法是将其作为嵌入代码中的参数传递,或者使用ExternalInterface,就像 wvxvw 提到的那样。我可能会走 flash var 路线——你在不同的布局之间进行选择,所以有一个设置而不是根据容器大小隐式选择就足够了。或者,您也可以根据一系列尺寸/纵横比而不是特定值来选择布局。

于 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 回答