2016-06-29 2 views
0

페이지의 다른 섹션으로 스크롤하면서 naviagtion 클래스를 변경하려고하는데 오류가 발생했습니다. 다음은 현재 코드입니다.내비게이션 변경 페이지에서의 활성 클래스 jQuery로 스크롤

(function($) { 
"use strict"; 

    $(document).ready(function() { 

    $(document).on("scroll", onScroll); 

    //smoothscroll 
    $('a[href^="#"]').on('click', function (e) { 
     e.preventDefault(); 
     $(document).off("scroll"); 

     $('a').each(function() { 
      $(this).removeClass('active'); 
     }) 
     $(this).addClass('active'); 

     var target = this.hash, 
      menu = target; 
     $target = $(target); 
     $('html, body').stop().animate({ 
      'scrollTop': $target.offset().top+2 
     }, 500, 'swing', function() { 
      window.location.hash = target; 
      $(document).on("scroll", onScroll); 
     }); 
    }); 
}); 

function onScroll(event){ 
    var scrollPos = $(document).scrollTop(); 
    $('.menu li a').each(function() { 
     var currLink = $(this); 
     var refElement = $(currLink.attr("href")); 
     if (refElement.position().top <= scrollPos && refElement.position().top + refElement.height() > scrollPos) { 
      $('.menu li a').removeClass("active"); 
      currLink.addClass("active"); 
     } 
     else{ 
      currLink.removeClass("active"); 
     } 
    }); 
} 

    })(jQuery); 

WordPress 테마에서 사용하려고합니다. 문제를 일으킬 수있는 코드 레이아웃에 실수가 있습니까?

미리 감사드립니다.

Scott.

+0

어떤 오류가 발생합니까? – Dylon

+0

안녕하세요, 임 점점 : Uncaught ReferenceError : $ target이 정의되지 않았습니다 –

+0

나는 엄격한 모드가 활성화 된 전역 변수로 $ target이 사용되는 것이 문제라고 생각합니다. 제안 된 솔루션을 게시했습니다. 참조 : https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode#Converting_mistakes_into_errors – Dylon

답변

0

문제는 그것을 정의하기 전에 엄격 모드가 활성화 된 당신이 $target를 사용하고있을 수 있습니다. 선언 목록에 $target 초기화 (쉼표로 목록에 추가) 해보십시오.

(function($) { 
"use strict"; 

    $(document).ready(function() { 

    $(document).on("scroll", onScroll); 

    //smoothscroll 
    $('a[href^="#"]').on('click', function (e) { 
     e.preventDefault(); 
     $(document).off("scroll"); 

     $('a').each(function() { 
      $(this).removeClass('active'); 
     }) 
     $(this).addClass('active'); 

     var target = this.hash, 
      menu = target, 
      $target = $(target); 
     $('html, body').stop().animate({ 
      'scrollTop': $target.offset().top+2 
     }, 500, 'swing', function() { 
      window.location.hash = target; 
      $(document).on("scroll", onScroll); 
     }); 
    }); 
}); 

function onScroll(event){ 
    var scrollPos = $(document).scrollTop(); 
    $('.menu li a').each(function() { 
     var currLink = $(this); 
     var refElement = $(currLink.attr("href")); 
     if (refElement.position().top <= scrollPos && refElement.position().top + refElement.height() > scrollPos) { 
      $('.menu li a').removeClass("active"); 
      currLink.addClass("active"); 
     } 
     else{ 
      currLink.removeClass("active"); 
     } 
    }); 
} 

    })(jQuery); 
+0

감사합니다. 많은 문제로 인해 문제가 해결 된 것 같습니다. 이제는 스크롤 기능과 관련하여 다른 오류가 발생합니다. 임 : jUncaught 오류 : 구문 오류, 인식 할 수없는 표현 : http : // localhost : 8888/chase 어떤 아이디어입니까? 시간 내 주셔서 정말 고마워요. –

+0

죄송합니다. 마지막으로 주석을 무시하십시오. ID가없는 행이 있기 때문입니다. 도와 줘서 고마워. –