2016-07-21 9 views
0

Мне нужна контрольная точка, чтобы обнаружить, что панель прокрутки по-прежнему прокручивается или нет. Я отправляю запрос сервера, прокручивая полосу прокрутки с задержкой в ​​100 миллисекунд. Я имел в виду, каждые 100 миллисекунд я отправляю запрос на сервер во время прокрутки. Это нормально, когда я медленно прокручиваю сетку. Но, когда я перетаскиваю со страницы сверху вниз Я мог видеть, что на сервер отправляется несколько запросов. Я хочу знать, есть ли какой-либо флаг для удаления длинного прокрутки. Вы можете найти кодКак обнаружить панель прокрутки по-прежнему прокручивается или нет в GWT?

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

Таким образом, мне нужно рассмотреть последний запрос только как действительный запрос. Все предыдущие запросы недействительны. У меня есть логика, чтобы отменить все предыдущие логики. Но, мне нужна контрольная точка, чтобы все еще прокручивать полосу прокрутки без разблокировки панели.

Пожалуйста, помогите мне ..

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

Пожалуйста, обратите внимание, что первое событие прокрутки вызовет делает запрос, потому что таймер еще не запущен.

+0

Я пробовал этот путь, но каждый 100 мс запрос собирается на сервер, когда я делаю медленную прокрутку (прокрутка по-прежнему). Мой случай немного другой, я согласен с вашей точкой зрения. Я все еще прокручиваю с некоторой задержкой (скажем, 110 мс). В этом случае я хочу зафиксировать только последнюю позицию прокрутки, чтобы отправить запрос. –