在GWT中如何检测滚动面板是否仍在滚动?

时间:2016-07-21 06:10:00

标签: gwt uibinder

我需要检查点来检测滚动面板是否仍在滚动。我在滚动条滚动时发送服务器请求,延迟为100毫秒。 我的意思是,我在滚动时每隔100毫秒将请求发送到服务器。当我在网格中慢慢滚动时,这很好。但是,当我从页面顶部拖到底部时 我可以看到有多个请求要去服务器。我想知道是否有任何标志要删除长卷轴。请找到代码

    @Override
    public void onScroll(final ScrollEvent scrollEvent)
    {
        int delay = 100;
        super.onScroll(scrollEvent, delay);
    }

我正在使用GWT类com.google.gwt.dom.client.BrowserEvents.ScrollEvent。我需要以下逻辑

    @Override
    public void onScroll(final ScrollEvent scrollEvent)
    {
        int delay = 100;
        if(stillScollbarScrolling) {
            return;
        } else {
            super.onScroll(scrollEvent, delay);
        }           
    }   

因此,我需要将最后一个请求视为有效请求。以前的所有请求都无效。我有逻辑取消所有以前的逻辑。但是,我需要检查点仍然滚动条滚动而不释放条。

请帮帮我..

1 个答案:

答案 0 :(得分:0)

如果我理解你,你需要取消重复滚动事件。如果是这样,您可以使用Timer来执行此操作。

一旦发生滚动事件,您就会启动计时器。如果触发了下一个滚动事件,则检查计时器是否仍在运行。如果是这样,则表示您有一个应该取消的重复事件。如果计时器没有运行,那么它不是重复事件,应该完成请求。

以下是代码:

Timer timer = new Timer() {
    @Override
    public void run() {
        // do nothing...
    }
};

@Override
public void onScroll(final ScrollEvent scrollEvent) {
    if(timer.isRunning()) {
        // timer is running - stop the timer and do nothing (cancel event)
        timer.cancel();
    }
    else
        // timer is not running - do request
        super.onScroll(scrollEvent);

    // restart the timer with 100ms delay
    timer.schedule(100);
}

请注意,第一个滚动事件将导致执行请求,因为计时器尚未启动。