【问题标题】:How to detect the scroll panel is still scrolling or not in GWT?如何在 GWT 中检测滚动面板是否仍在滚动?
【发布时间】:2016-07-22 21:43:10
【问题描述】:

我需要检查点来检测滚动面板是否仍在滚动。我在滚动滚动条时发送服务器请求,延迟为 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);
        }           
    }   

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

请帮帮我..

【问题讨论】:

  • 所以你只需要最后一次长滚动请求?
  • 是的,亚当。否则,太多的请求将访问服务器数据库。

标签: gwt uibinder


【解决方案1】:

如果我理解你的话,你需要取消重复滚动事件。如果是这样,您可以使用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);
}

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

【讨论】:

  • 我尝试过这种方式,但是当我进行慢速滚动(仍在滚动)时,每 100 毫秒的请求都会发送到服务器。我的情况有点不同,我同意你的观点。我仍然在滚动有一些延迟(比如说 110 毫秒)。在这种情况下,我只想捕获最后一个滚动位置来发送请求..
猜你喜欢
  • 1970-01-01
  • 2013-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多