Java 如何检测GWT元素是否可见?
我有几个显示和隐藏的div。如何检测给定元素当前在页面上是否可见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) {
元素的样式没有帮助,因为它是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);