【发布时间】:2012-02-08 21:23:18
【问题描述】:
我有几个显示和隐藏的 div。如何检测给定元素当前是否在页面上可见?
元素的样式无济于事,因为它是被隐藏的 DOM 中的父 div。
【问题讨论】:
-
你可能想阅读这篇关于 GWT 的作品:akutz.wordpress.com/2009/01/19/…
标签: java javascript gwt
我有几个显示和隐藏的 div。如何检测给定元素当前是否在页面上可见?
元素的样式无济于事,因为它是被隐藏的 DOM 中的父 div。
【问题讨论】:
标签: java javascript gwt
它的偏移高度和宽度都是0。
UIObject component = ...
boolean isHidden = (component.getOffsetHeight() == 0 && component.getOffsetWidth() == 0);
【讨论】:
visibility:hidden 而不是 display:none,我不相信这是真的。
visibilty:hidden 并且其他答案没有编译
我之前也遇到过这个问题,我发现以下是最好的解决方案:
给定一个名为“元素”的元素:
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 方法。很高兴知道。
你可以有这样的东西:
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())
我在树下走,所以知道父元素是可见的;如果您的情况不同,您可能需要对所有父元素进行相同的检查。
【讨论】: