2012-04-18 3 views
4

저는 무한 스크롤 형식의 페이지를 가지고 있습니다 (무한대 스크롤의 예를 들면 here을 클릭하고 아래로 스크롤). 사용자가 스크롤 할 때마다 update()이라는 함수를 실행합니다.시간 초과가 실행 대기 중인지 확인하십시오.

대신 setInterval을 사용할 수 있으며 x 밀리 초마다 검사 할 수 있지만 시간 초과가되면 페이지가 더 빠르고 안정적으로 응답합니다.

기본적으로 update()은 콘텐츠를 페이지에 추가 한 다음 더 많은 페이지를 스크롤 할 수 없을만큼 충분하지 않은 경우 update()을 다시 호출하도록 시간 제한을 설정합니다. 하나의 픽셀 만 스크롤했다면 괜찮을 것이지만 물론 스크롤 할 때 수십 또는 수백 개의 스크롤 이벤트가 발생합니다. 한 번에 수십 (또는 수백)의 시간 초과가 실행되므로 문제가됩니다. 타임 아웃이 너무 많으면 새로운 콘텐츠를 추가하는 일관된 애니메이션이 사라집니다.

그래서 내가 가진 ID를 사용하여 실행하기 위해 이미 시간 초과가 대기하고 있는지 확인하고 싶었지만이 기능은 JavaScript가 아닌 것 같습니다. 시간 초과 ID가 아직 실행되었는지 여부를 확인하는 방법이 있습니까? 그렇지 않다면 대안이 있습니까? 나는 JQuery가있다.

... 아니면 그냥 간격을두고 응답 성을 희생해야합니까?

+0

당신은 그것을 실행 한 후 제한 시간이 자신의 타이머 값을 일부 글로벌 꼬추를 업데이트 할 수, 그래서 당신은 그 그것을 실행했는지 알 확인할 수 있습니다. 시간 제한을 실행할 때 – Pointy

답변

3

함수가 실행되면 간격을 지우고 초기 변수를 null로 설정하십시오. 그런 다음 Null 값을 확인하십시오. 이 뭉치를하고 있다면 이드의 배열로 배열을 저장할 수 있습니다.

예 :

var intervals = []; 

if(intervals[id] != null){ 
    intervals[id] = setTimeout(some_func, 1000); 

    var some_func = function(){ 
     // do stuff 
     clearTimeout(intervals[id]); 
     intervals[id] = null; 
    } 
} 
+1

을 null로 설정하는 것은 내가 이것을 사용하는 트릭입니다. – mattbornski

+1

@mattbornski 한 번만 호출 될지라도 모든 사이트에서 시간 제한을 설정해야 할 때마다이 정확한 패턴을 사용한다고 말하지 않으면 거짓말 쟁이가됩니다. – tkone

관련 문제