当前位置:  开发笔记 > 运维 > 正文

Flex:确定组件是否正在显示

如何解决《Flex:确定组件是否正在显示》经验,为你挑选了3个好方法。

确定Flex/Flash中的组件是否显示在用户屏幕上的最佳方法是什么?我正在寻找类似于Java的Component.isShowing()方法.

showhide事件触发的知名度,这似乎是一个ViewStack组件的第一后裔工作,但没有进一步下跌的显示树.



1> 小智..:

...或避免递归:

public static function isVisible(obj:DisplayObject):Boolean
{
    while (obj && obj.visible && obj !== Application.application)
    {
        obj = obj.parent;
    }
    return obj && obj.visible;
}



2> Carlo..:

您想检查组件属性是否为true,这是否适用于DisplayList中组件的所有父项,我是否正确?

public static function isVisible(c : UIComponent) : Boolean {
    if (c == null) return false;
    if (c is Application) return c.visible;
    return c.visible && isVisible(c.parent);
}



3> cliff.meyers..:

UIComponent.visible不一定对于visible = false的对象的子节点有效.来自文档:

"在任何一种情况下,对象的子节点都不会发出show或hide事件,除非该对象专门编写了一个实现来执行此操作."

我写了一个示例应用程序,证实这是真的.你可以做的是走上显示列表检查父母可见是否为假.基本上"可见"会产生误报,但不应该给出假阴性.这是我放在一起的快速实用程序:

package
{
    import flash.display.DisplayObject;

    import mx.core.Application;

    public class VisibilityUtils
    {
        public static function isDisplayObjectVisible(obj : DisplayObject) : Boolean {
            if (!obj.visible) return false;
            return checkDisplayObjectVisible(obj);
        }

        private static function checkDisplayObjectVisible(obj : DisplayObject) : Boolean {
            if (!obj.parent.visible) return false;
            if (obj.parent != null && !(obj.parent is Application))
                return checkDisplayObjectVisible(obj.parent);
            else
                return true;
        }
    }
}

我没有做过比这更简单的测试,但它应该让你开始.

推荐阅读
ifx0448363
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有