如何检测GWT元素是否可见?

时间:2012-01-12 15:29:10

标签: java javascript gwt

我有几个显示和隐藏的div。如何在给定元素上检测到它当前在页面上可见?

元素的样式无济于事,因为它是DOM中隐藏的父div

4 个答案:

答案 0 :(得分:4)

它的偏移高度和宽度都是0。

UIObject component = ...
boolean isHidden = (component.getOffsetHeight() == 0 && component.getOffsetWidth() == 0);

答案 1 :(得分:1)

我之前也遇到过这个问题,我发现以下是最佳解决方案:

给定一个名为“element”的元素:

boolean visible = UIObject.isVisible(element) && (element.getAbsoluteLeft() > 0) && (element.getAbsoluteTop() > 0);

UIObject上的静态“isVisible”方法将检查display none和那种东西,而对AbsoluteLeft和AbsoluteTop的检查是为了处理分离。我发现后者检查是必要的原因是因为如果一个元素与DOM分离(因此在页面上不可见),那么GWT仍会告诉你它的可见性是真的,除非它的可见性被明确地设置为false

注意:您可以使用Simon建议的偏移宽度和高度检查替换AbsoluteTop和AbsoluteLeft检查,但您应该在我看来也包括isVisible检查。

答案 2 :(得分:0)

你可以有类似的东西:

  public boolean isVisible(Widget w) {
        while (w.getElement().hasParentElement()) {
           if (w.isVisible()) {
                return true;
            }
            w = w.getParent();
        }
        return w.isVisible();
    }

答案 3 :(得分:0)

如果它是一个元素,而不是一个UIObject,以下内容对我有用:

!"hidden".equals(element.getStyle().getVisibility())
  && !"none".equals(element.getStyle().getDisplay())
我走在树下,所以知道父元素是可见的;如果您的情况不同,您可能需要对所有父元素进行相同的检查。