代码之家  ›  专栏  ›  技术社区  ›  Michael Neale

如何使用GWT创建无限滚动面板?

gwt
  •  5
  • Michael Neale  · 技术社区  · 16 年前

    通过无限滚动,我的意思是我最初加载了一些子窗口小部件,当用户缓慢向下滚动时,加载更多的小部件来填充它。

    有什么好主意吗?

    (理想情况下需要GWT 1.6和1.5的产品)

    2 回复  |  直到 11 年前
        1
  •  8
  •   Unihedron    11 年前

    尝试如下操作:

    public static class InfiniteScrollPanel implements ScrollHandler {
        String text = "Lorem ipsum dolor sit amet, consectetuer...";
        ScrollPanel panel = new ScrollPanel(new HTML(text));
        int height = 200;
        int width = 200;
    
        public InfiniteScrollPanel() {
            panel.setHeight(height);
            panel.setWidth(width);
            panel.addScrollHandler(this);  
        }
        public void onScroll(ScrollEvent event) {
            if (panel.getScrollPosition == height) {
                panel.add(new HTML(text));
            }
        }
    }
    

    这段代码的作用是:创建一个滚动面板,并向其添加一个滚动处理程序。在ScrollHandler中,将ScrollHeight与面板的高度进行比较,然后将另一个子级添加到面板中。

    我没有测试它,因为我在上网本上写这个,而且没有IDE。

        2
  •  6
  •   Unihedron    11 年前

    我至少在GWT 1.5中确认了以下工作:

    final VerticalPanel vp = new VerticalPanel();
    for (int i = 0; i < 40; i++) {
        vp.add(new HTML("Oh oh"));
    }
    final HTML f = new HTML("END");
    vp.add(f);
    
    final ScrollPanel panel = new ScrollPanel(vp);
    panel.setHeight("20em");
    panel.addScrollListener(new ScrollListener() {
    
        HTML end = f;
        public void onScroll(Widget widget, int scrollLeft, int scrollTop) {
    
            int finalPos = end.getAbsoluteTop() + end.getOffsetHeight(); 
            int panelPos = panel.getAbsoluteTop() + panel.getOffsetHeight();
            if (finalPos == panelPos) {
                end = new HTML("MORE !!");
                vp.add(end);
            }
    
        }
    });
    

    注意,有趣的部分是位置的计算。

    推荐文章