Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/476.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何检测GWT元素是否可见?_Java_Javascript_Gwt - Fatal编程技术网

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

Java 如何检测GWT元素是否可见?,java,javascript,gwt,Java,Javascript,Gwt,我有几个显示和隐藏的div。如何检测给定元素当前在页面上是否可见 元素的样式没有帮助,因为它是DOM中被隐藏的父级div。其偏移高度和宽度都将为0 UIObject component = ... boolean isHidden = (component.getOffsetHeight() == 0 && component.getOffsetWidth() == 0); 你可以有这样的东西: public boolean isVisible(Widget w) {

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


元素的样式没有帮助,因为它是DOM中被隐藏的父级
div

其偏移高度和宽度都将为0

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

你可以有这样的东西:

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

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

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

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

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

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

UIObject上的静态“isVisible”方法将检查DisplayNone之类的东西,而AbsoluteLeft和AbsoluteTop上的检查用于处理分离。我发现后面的检查是必要的,因为如果元素从DOM分离(因此在页面上不可见),那么GWT仍然会告诉您它的可见性为true,除非它的可见性被显式设置为false


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

如果父项设置为
可见性:隐藏
,而不是
显示:无
,我认为这是不对的。这个解决方案满足了我的需要。我没有跳过任何
visibility:hidden
,其他答案也没有编译。您可能想阅读这篇关于GWT的文章:感谢您指出静态
isvisibility
方法。很高兴知道。
boolean visible = UIObject.isVisible(element) && (element.getAbsoluteLeft() > 0) && (element.getAbsoluteTop() > 0);