2016-07-21 15 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

이 방법을 시도했지만 느린 스크롤 (Still scrolling)을 수행 할 때마다 100ms마다 요청이 서버로 전송됩니다. 내 경우는 조금 다르다. 나는 당신의 의견에 동의한다. 나는 여전히 약간의 지연 (110ms라고 말함)으로 스크롤하고있다. 이 경우 요청을 보내려면 마지막 스크롤 위치 만 캡처하고 싶습니다. –