确定组件是不是在 Flex 中完全可见的算法?

Posted

技术标签:

【中文标题】确定组件是不是在 Flex 中完全可见的算法?【英文标题】:Algorithm to determine if a component is fully visible in Flex?确定组件是否在 Flex 中完全可见的算法? 【发布时间】:2010-09-21 14:19:36 【问题描述】:

是否有一种内置方法可以确定组件在 Flex 应用程序中是否完全可见(即不是以一种或另一种方式离开屏幕)。如果不是,我将如何解决?

如果我的主要“下一个”和“上一个”按钮不在屏幕上,我想显示或隐藏其他“下一个”和“上一个”按钮。

“重新计算”最好听什么事件? stage.resize?

谢谢!

【问题讨论】:

【参考方案1】:

您能否详细说明可见项目及其所在的容器?是否必须滚动一些容器才能到达按钮?还是有人将 flexlib:MDICanvas 的子窗口部分拖出屏幕的问题?

我认为它会归结为组件的 x,y 位置是否超出其容器的宽度和高度,(依此类推,直到您到达***应用程序为止。)

【讨论】:

【参考方案2】:

这是一种计算组件是否在舞台范围内的方法,但是它不会告诉您该组件是否被另一个组件隐藏,或者该组件是否因为超出范围而被隐藏另一个容器。

public function isComponentWithinStage(c:UIComponent):Boolean 
    var tl:Point = c.localToGlobal(new Point(0, 0));
    var br:Point = c.localToGlobal(new Point(c.width, c.height));

    //are we off the left or top of stage?
    if ( tl.x < 0 || tl.y < 0 ) 
        return false;
    

    var stage:Stage = Application.application.stage;

    //off the right or bottom of stage?
    if ( br.x > stage.width || br.y > stage.height ) 
        return false;
    

    return true;

【讨论】:

这里不考虑组件的宽度或高度。

以上是关于确定组件是不是在 Flex 中完全可见的算法?的主要内容,如果未能解决你的问题,请参考以下文章

通过从 flex 中的另一个 mxml 文件访问组件来使组件不可见

Flex 组件在应用程序上的可见性

可以在状态更改时更改组件 - Flex

FLEX - 禁用滚动条的鼠标滚动?

如何知道 TextInput 组件在 Flex 中是不是处于活动状态

Flex IFrame 组件未呈现在可视区域之外