有关GWT ScrollPanel的问题。
有没有办法确定在ScrollPanel中显示哪个子元素?
(当然,ScrollPanel包含具有HTML对象的DecoratorPanel)
答案 0 :(得分:1)
这是执行Job的GWT方法(它是从上面建议的JQuery解决方案翻译而来)。
/**
* @param widget the widget to check
* @return true if the widget is in the visible part of the page
*/
private boolean isScrolledIntoView(Widget widget) {
if (widget != null) {
int docViewTop = Window.getScrollTop();
int docViewBottom = docViewTop + Window.getClientHeight();
int elemTop = widget.getAbsoluteTop();
int elemBottom = elemTop + widget.getOffsetHeight();
return ((elemBottom <= docViewBottom) && (elemTop >= docViewTop));
}
return false;
}
答案 1 :(得分:0)
AFAIK没有内置功能,不在DOM或GWT中。
如果您有固定的高度元素,您可能会尝试计算是否显示某个元素:Check if element is visible after scrolling
答案 2 :(得分:0)
如果要检查窗口小部件是否在滚动面板中可见,您可以这样做(类似于Massi的解决方案):
/**
* @param widget the widget to check
* @return true if the widget is in the visible part of the scroll panel
*/
private boolean isVisibleInScrollPanel(Widget widget, ScrollPanel scrollPanel) {
if (widget != null) {
int containerTop = scrollPanel.getAbsoluteTop();
int containerBottom = containerTop + scrollPanel.getOffsetHeight();
int widgetTop = widget.getAbsoluteTop();
int widgetBottom = widgetTop + widget.getOffsetHeight();
return ((widgetBottom <= containerBottom) && (widgetTop >= containerTop));
}
return false;
}
我用这种方法使用了这个方法:
// When the selected widget is invisible, then we ensure it to be visible
if (!isVisibleInScrollPanel(widget, scrollPanel)) {
scrollPanel.ensureVisible(widget);
}