我有一个带有根mx的Flex 3项目:应用程序。宽度和高度设置为pct值,因为应用程序有几种尺寸可供用户选择,因此在embed的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,仅举几例。我不能依赖任何这些值,因为它们会根据浏览器缩放级别而改变。
我真正需要的是嵌入的width属性。建议?
感谢您的帮助。
答案 0 :(得分:1)
stage.stageWidth
返回的宽度取决于SWF的scale mode设置。 Flex使用的stage.scaleMode = StageScaleMode.NO_SCALE;
返回容器的大小。它受嵌入大小和浏览器缩放级别的影响。
如果stage.scaleMode
设置为其他任何内容,它将返回SWF中定义的维度,并始终返回相同的值。并且,正如您所提到的,loaderInfo.width
返回SWF中设置的维度,无论缩放模式还是嵌入维度。不幸的是,没有设置使其受嵌入大小的影响,但不浏览器缩放级别。
无论浏览器缩放级别如何,找到容器尺寸的唯一方法是将其作为嵌入代码中的参数传递,或使用ExternalInterface
,如wvxvw提及。我可能会选择flash var route - 你在不同的布局之间进行选择,所以它足够适合设置而不是根据容器大小隐式选择。或者,您也可以选择基于尺寸/宽高比范围的布局,而不是特定值。
答案 1 :(得分: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);
}