2014-08-30 2 views
0

다음 예를 사용하여 스크롤 방향을 감지합니다. 그러나 모든 스크롤 동작에서 작동하는 것으로 보입니다. 방향이 바뀔 때만 작동하도록 할 수있는 방법이 있습니까?여러 번 스크롤 스크롤을 감지

var lastScrollTop = 0; 
$(window).scroll(function(event){ 
    var st = $(this).scrollTop(); 
    if (st > lastScrollTop){ 
     // downscroll code 
    } else { 
     // upscroll code 
    } 
    lastScrollTop = st; 
}); 

답변

0

확실히. 마지막으로 이동 한 방향을 추적하는 자리 표시 자 변수를 사용하고 일치하는 경우 false를 반환하십시오.

var lastScrollTop = 0; 
var lastDirection = ""; 
$(window).scroll(function (event) { 
    var st = $(this).scrollTop(); 
    if (st > lastScrollTop) { 
     lastScrollTop = st; 
     if (lastDirection === 'down') return false; 
     // downscroll code 
     console.log("scrolling down"); 
     lastDirection = 'down'; 
    } else { 
     lastScrollTop = st; 
     if (lastDirection === 'up') return false; 
     // upscroll code 
     console.log("scrolling up"); 
     lastDirection = 'up'; 
    } 

}); 
+0

안녕하세요, 각 스크롤 변경에 대해 여전히 여러 번 실행되는 것으로 보입니다. 나는 방향이 바뀔 때만 그것을 발사하려고 노력한다. lastDirection을 사용하여 코드에 오류가 있어야한다고 생각합니다. lastScrollTop 변수를 복사해야합니까? –

+0

나는 코드를 시도하지 않았다. 나를 빨리 바이올린에 꽂고 무슨 일이 일어날 지 지켜 봅시다. –

+0

아, 고쳤습니다. 문제는 lastDirection이 람다 함수에서 정의 되었기 때문에 모든 반복을 다시 초기화한다는 것입니다. lastScrollTop이 정의 된 것과 동일한 범위에서 정의하는 것이 가장 좋습니다. my [fiddle] (http://jsfiddle.net/vupzbvzw/3/)도 참조하십시오. –

관련 문제