【问题标题】:How to detect is a GWT element is visible?如何检测 GWT 元素是否可见?
【发布时间】:2012-02-08 21:23:18
【问题描述】:

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

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

【问题讨论】:

标签: java javascript gwt


【解决方案1】:

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

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

【讨论】:

  • 如果父级设置为 visibility:hidden 而不是 display:none,我不相信这是真的。
  • 这个解决方案满足了我的需求。我没有跳过任何visibilty:hidden 并且其他答案没有编译
【解决方案2】:

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

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

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

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

注意:您可以按照 Simon 的建议将 AbsoluteTop 和 AbsoluteLeft 检查替换为偏移宽度和高度检查,但我认为您也应该包括 isVisible 检查。

【讨论】:

  • 感谢您指出静态isVisible 方法。很高兴知道。
【解决方案3】:

你可以有这样的东西:

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

【讨论】:

    【解决方案4】:

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

    !"hidden".equals(element.getStyle().getVisibility())
      && !"none".equals(element.getStyle().getDisplay())
    

    我在树下走,所以知道父元素是可见的;如果您的情况不同,您可能需要对所有父元素进行相同的检查。

    【讨论】:

      猜你喜欢
      • 2012-06-11
      • 1970-01-01
      • 2017-01-01
      • 2012-07-08
      • 1970-01-01
      • 1970-01-01
      • 2010-11-18
      • 2014-04-22
      • 2020-08-06
      相关资源
      最近更新 更多