2014-06-14 3 views
15

처음으로 사용자가 스크롤 할 때 실제로 페이지를 스크롤하지 않고 전환이있는 클래스를 추가하는 페이지를 코딩하고 있습니다. 사용자가 아래로 스크롤하는 것을 감지하고 싶습니다. 위로 스크롤하면 다른 작업을 수행하기를 원합니다. 내가 발견 한 모든 메서드는 현재 본문 ScrollTop을 정의한 다음 페이지를 스크롤 한 후 방향을 정의하는 scrollTop 본문과 비교하지만 실제로 스크롤하지 않기 때문에 본문 scrollTop()은 변화는 없어. 실제로 스크롤하지 않고 스크롤 방향을 결정하는 방법

animationIsDone = false; 

function preventScroll(e) { 

    e.preventDefault(); 
    e.stopPropagation(); 
} 

$('body').on('mousewheel', function(e) { 

    if (animationIsDone === false) { 
     $("#main-header").removeClass("yellow-overlay").addClass("yellow-overlay-darker"); 
     $(".site-info").first().addClass("is-description-visible"); 
     preventScroll(e); 

     setTimeout(function() { 
      animationIsDone = true; 
     }, 1000); 

    } 


}); 

내가 함께 온 것입니다, 그러나 방향을 중요하지 않습니다 그런 식으로 내가가 이벤트를 트리거 스크롤

+0

노트'그 mousewheel'가되지 및 비 표준 : 여기

는 데모입니다. FireFox 만 지원하지 않습니다. FireFox를 지원하기 위해서는'DOMMouseScroll'을 처리 할 수 ​​있습니다. mousewheel 이벤트 핸들러의 e.wheelDelta와 동등한 것은 DOMMouseScroll 이벤트 핸들러의'-40 * e.detail'입니다. 또한 jQuery가 속성을 제거한 것처럼 보이면 'originalEvent'에 액세스해야합니다. –

+0

** [휠 이벤트] (https://developer.mozilla.org/en-US/docs/Web/Events/wheel) **를 사용할 수 있습니다. 스크롤을 처리하면서 크로스 브라우저를 지원하는 예제를 확인할 수 있습니다 : ** [stackoverflow.com/questions/4989632 ...] (http://stackoverflow.com/questions/4989632/differentiate-between-scrollupup -down-in-jquery/24792018 # 24792018) ** – jherax

답변

18

mousewheel 이벤트가 빠르게 쓸모 없게되었습니다. 대신 wheel을 사용해야합니다.

이렇게하면 스크롤 막대가없는 가로 및/또는 세로 스크롤 방향으로 쉽게 이동할 수 있습니다.

이 이벤트는 현재 모든 주요 브라우저에서 지원되며 미래의 표준으로 남아 있어야합니다.

window.addEventListener('wheel', function(e) { 
 
    if (e.deltaY < 0) { 
 
    console.log('scrolling up'); 
 
    document.getElementById('status').innerHTML = 'scrolling up'; 
 
    } 
 
    if (e.deltaY > 0) { 
 
    console.log('scrolling down'); 
 
    document.getElementById('status').innerHTML = 'scrolling down'; 
 
    } 
 
});
<div id="status"></div>

3

e.wheelDelta

var animationIsDone = false, scrollDirection = 0; 

function preventScroll(e) { 

    e.preventDefault(); 
    e.stopPropagation(); 
} 

$('body').on('mousewheel', function(e) { 

    if (e.wheelDelta >= 0) { 
     console.log('Scroll up'); //your scroll data here 
    } 
    else { 
     console.log('Scroll down'); //your scroll data here 
    } 
    if (animationIsDone === false) { 
     $("#main-header").removeClass("yellow-overlay").addClass("yellow-overlay-darker"); 
     $(".site-info").first().addClass("is-description-visible"); 
     preventScroll(e); 

     setTimeout(function() { 
      animationIsDone = true; 
     }, 1000); 

    } 


}); 

주의를 사용해보십시오 : 그 마우스 휠 기억 FireFox에서 더 이상 사용되지 않으며 지원되지 않습니다.

+0

정말 고마워요. 마우스 휠 문제에주의를 기울 이겠습니다. =) –

17

시도해보십시오 addEventListener을 사용하십시오.

window.addEventListener('mousewheel', function(e){ 
    wDelta = e.wheelDelta < 0 ? 'down' : 'up'; 
    console.log(wDelta); 
}); 

Demo

업데이트 : 답변 중 하나에서 언급 한 바와 같이

마우스 휠 이벤트는 감가 상각된다. 대신 휠 이벤트를 사용해야합니다.

+1

정말 고마워요, 매력처럼 작동했습니다. 여기에 다른 사람이 필요로하는 경우를위한 단축 버전이 없습니다 (그렇게하면 초보자라도 읽기가 어려울 수 있습니다). –

+2

www139의 대답에서 언급했듯이, mousewheel 이벤트는 [depreciated] (https://developer.mozilla.org)입니다./ko-US/docs/웹/이벤트/마우스 휠). 대신 ['wheel' 이벤트] (https://developer.mozilla.org/en-US/docs/Web/Events/wheel)를 사용해야합니다 (다시 www139의 답변 참조). – JoeRocc

관련 문제