如何根据舞台宽度定义布尔值?

时间:2011-02-14 01:12:48

标签: flex actionscript-3 layout performance boolean

我正在尝试为Flex应用程序创建动态布局。

我需要一个布尔值,它取决于浏览器窗口的整体宽度,用于设置状态,

    if(this.parentApplication.width<950)
        {
            currentState = "wide"   
        }else{
            currentState = "narrow"
        }

但是,我不能在fx:Script标签中说明这一点,那么实现它的最佳方法是什么? enterFrame="application1_enterFrameHandler(event)"有效,但我不禁觉得这可能是不必要的,而且计算密集程度非常大(而且我的应用程序运行速度很慢,预计在不久的将来会有一两个与弹性效率相关的问题)。

由于

约什

2 个答案:

答案 0 :(得分:1)

确实等待调整大小会更便宜,更优雅。 在as3中, S tage类不再存在,并被 s tage取代。 语法可能也不起作用(as3不太喜欢匿名函数:))。

你需要让舞台可用(例如check this)然后 像这样的东西:

[...when stage is available...]
stage.addEventListener( Event.RESIZE, onResizeHandler );

onResizeHandler( null );//calling the method with an null event to force a first check
[...other instructions...]

然后

private function onResizeHandler( e:Event ):void
{
    currentState = ( stage.stageWidth < 950 ) ? 'wide' : 'narrow';
    //or testing a given object's width rather than the stage.
}

答案 1 :(得分:0)

您可以尝试使用事件处理程序。

myListener = new Object();
myListener.onResize = function() {
  currentState = (obj.parentApplication.width<950) ? 'wide' : 'narrow';
};
Stage.addListener(myListener);

抱歉,我的ActionScript有点生疏,已经有一段时间了,但你可能不得不更改obj.parentApp...,据我所知,在这里使用this会引用参数通常通过回调函数。

编辑:忘了提及会发生什么..基本上,当用户调整电影阶段时,会触发匿名函数..比检查每个帧事件要便宜很多。