2016-07-21 4 views
0

スクロールパネルがまだスクロールしているかどうかを検出するにはチェックポイントが必要です。 100ミリ秒の遅延でスクロールバーをスクロールしながら、サーバー要求を送信しています。 私は100ミリ秒ごとに、スクロール中にサーバーに要求を送信していることを意味します。グリッド内をゆっくりとスクロールすると、これは問題ありません。しかし、ページの上から下にドラッグすると 私はそこに複数のリクエストがサーバーに行くことがわかりました。私は、長いスクロールを削除するフラグがあることを知りたい。私はGWTクラスcom.google.gwt.dom.client.BrowserEvents.ScrollEventを使用していたコードスクロールパネルを検出する方法はまだGWTでスクロールしていますか?

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

を見つけてください。私は以下の種類のロジックが必要です

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

したがって、最後のリクエストは有効なリクエストとしてのみ考慮する必要があります。以前のリクエストはすべて無効です。以前のロジックをすべてキャンセルするロジックがあります。しかし、私はチェックバーがスクロールバーにスクロールバーをリリースせずに必要です。

私はあなたによく理解していれば、あなたはスクロールイベントを繰り返すキャンセルする必要があります。..

+0

したがって、長いスクロールの最後のリクエストのみが必要ですか? – Adam

+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); 
} 

してください、タイマーがまだ開始されていないため、第1スクロールイベントは要求をやっ引き起こすことに気づきます。

+0

私はこの方法を試しましたが、スロースクロール(スクロールスクロール)を行うと100msごとのリクエストがサーバーに送られます。私の場合はほとんど違うあなたの意見に同意します。私はまだいくつかの遅延でスクロールしています(110msと言うことができます)。この場合、私は最後のスクロール位置だけをキャプチャしてリクエストを送信したい –

関連する問題