2014-03-26 3 views
1

기본 자바 스크립트를 사용하려고하므로 jquery가로드되지 않습니다. 에 if 문을 작성하여 클래스의 클래스가있는 경우에만 본문 요소의 클래스를 제거하고 싶습니다. 이렇게하면 스크롤이있을 때마다 트리거하지 않도록합니다. 나는 기본적으로 윈도우가 스크롤되어 있고 몸체에이 클래스가 적용된 경우에만 클래스를 제거하기를 원한다. 그렇지 않으면 트리거하지 않아야한다.본체에 클래스가있는 경우 기본 네비게이션 자바 스크립트

이 코드를 사용하여 클래스를 제거했지만 몸체에 클래스가 있거나 적용되지 않은 경우에도 스크롤 할 때 항상 트리거됩니다. 이 경우 ... 나는 페이지에서하는 모든 스크롤과 함께 인쇄 된 콘솔에 scrollEvent를 표시합니다. 어떻게이 일을합니까?

if(document.body.classList){ 

    window.addEventListener('scroll', function(){ 
     console.log('scrollEvent'); 

     document.body.classList.remove('mobile-menu-open'); 

    }); 
} 

답변

1

를 확인하는 경우.

여기에 코드입니다 :

var removeMenuClass = function() { 
    document.body.classList.remove('mobile-menu-open'); 
    // remove the scroll listener 
    window.removeEventListener('scroll', removeMenuClass, false); 
} 

// add the scroll listener 
window.addEventListener('scroll', removeMenuClass, false); 

필요한 경우, 당신은의 EventListener 같은 방법으로 다시 연결할 수 있습니다 (귀하의 "이동 메뉴"다시는-열 때의 말을하자).

+0

이 기능은 작동하지만 첫 번째 스크롤에서만 클래스가 제거됩니다. 내가 탐색을 연 후에 (따라서 클래스가 다시 추가됨) 클래스가 스크롤됩니다. 본문에 클래스가 있는지 확인하는 지속 가능한 코드를 어떻게 만들 수 있습니까? 스크롤이 있으면 클래스를 제거합니다. 이것은 이상하게도 단지 한 번 작동합니다. –

+0

내 답변에 쓰여 있습니다. 메뉴가 열리면 이벤트 리스너를 다시 연결하기 만하면됩니다. – Skwal

2

귀하의 요구는 클래스가 body에서 제거되면 당신은, 그것은 더 이상 당신이 스크롤 할 때 트리거되지 않습니다 그런 식으로 리스너를 제거 할 수 클래스

window.addEventListener('scroll', function(){ 
    console.log('scrollEvent'); 

    // do the following only if it has the class 
    if(document.body.classList.contains('mobile-menu-open')) { 

     document.body.classList.remove('mobile-menu-open'); 

    } 

}); 
+0

일단 클래스가 제거되면 리스너를 제거하면이 대답은 완벽 할 것입니다 :) – Skwal

+1

클래스의 존재가 효과의 트리거 인 것처럼 들립니다. 그래서 다시 추가 할 수 있다고 가정합니다.이 경우 매번 이벤트 처리기를 추가/제거하는 것이 아니라 부울 검사를하는 것이 더 쉽고 효율적입니다. –

+0

나는 동의하지 않는다. 나는 내 자신의 대답을 덧붙이겠다. – Skwal

관련 문제