2009-12-27 3 views
0
scroller1 scroller2 
----------- ----------- 
|this is o| |this is a| 
|ne elemen| |nother el| 
|t, four l| |3 lines | 
|ines  | |   | 
----------- ----------- 

간단한 예제입니다. 각 scroller의 n 번째 요소로 스크롤 할 시스템을 설정했지만 분수를 사용하여 scroller1이 요소 4에 있고 중간에 5가 있으면 scroller2에 대해서도 동일한 작업을 수행하도록 분수를 사용합니다.div 스크롤의 최대 스택 호출 오류 방지

하지만 'onscroll'함수를 호출하면 다른 스크롤러가 올바른 위치로 설정되지만 scrollTop을 변경하면 스크롤되므로 'onscroll'이 호출됩니다. Javascript가 Max Stack Call 오류를 던지거나 두 스크롤러가 아래쪽에 도달 할 때까지 차례로 반복됩니다.

어떻게 예방할 수 있습니까?

답변

2

그것을 기반으로 onscroll 코드를 전역 변수, currentlyHandlingScrollEvent를 만들고 조건화 :

var currentlyHandlingScrollEvent = false; 
function handleScroll (e) { 
    if (!currentlyHandlingScrollEvent) { 
    currentlyHandlingScrollEvent = true; 
    // do stuff ... 
    currentlyHandlingScrollEvent = false; 
    } 
} 

scroller1.onscroll = handleScroll; 
scroller2.onscroll = handleScroll; 
+0

이 좋은 작품, 감사합니다! 스크롤을 멈추었을 때 변수를 변경하는 방법을 알기 위해 잠시 시간을 보냈지 만 지금은 완벽하게 작동합니다. – Tom

+0

죄송합니다. 변수를 초기 값으로 재설정하려면 내 대답을 편집하십시오. 실수해서 미안해. –

+0

사실,이 사실은 Safari에서만 작동합니다. Firefox를 포함한 다른 브라우저는 이전 동작으로 되돌아갑니다 ... 그리고 이것은 나를 죽이고 있습니다. @ http://www.tombarrasso.com/search/ 체크 아웃 – Tom