我有几个显示和隐藏的div。如何在给定元素上检测到它当前在页面上可见?
元素的样式无济于事,因为它是DOM中隐藏的父div
。
答案 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())
我走在树下,所以知道父元素是可见的;如果您的情况不同,您可能需要对所有父元素进行相同的检查。