如何知道GWT ScrollPanel中显示的元素

时间:2011-08-29 03:00:25

标签: gwt

有关GWT ScrollPanel的问题。

有没有办法确定在ScrollPanel中显示哪个子元素?

(当然,ScrollPanel包含具有HTML对象的DecoratorPanel)

3 个答案:

答案 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);
}