2013-09-02 4 views
0

아래 내용에 대한 필터 역할을하는 링크 목록이 정렬되어 있지 않습니다.addClass를 클릭하여 링크 한 다음 스크롤을 고정하십시오. 위로 링크를 클릭하십시오.

링크 1 개 링크 2 링크 의 클릭에 3 링크 4

어떤 링크, 클래스 "활성은"링크를 클릭 추가됩니다. 이것은 완벽하게 작동합니다.

링크 1 링크 2 링크 3 (활성) 링크 4

하지만 페이지를 아래로 스크롤하면, 해당 링크는보기를 벗어나, 그래서 "활성"링크가 상단에 충실 할 다른 클래스 "fixednav"를 추가하여

링크 3 (활성) +

는 ** 나는 기본적으로 활성 클릭 바이올린 처음있는 이러한 두 가지를 결합해야합니다 (스크롤에 나는 정상에 충실 활성 링크를 원하는) :

http://jsfiddle.net/m35dB/1/

http://jsfiddle.net/zq9hd/ **

내가 이것을 쓰는 것이 있습니까?

"Uncaught TypeError :"활성 "클래스의 속성 'undefined of top'을 읽을 수 없습니다. 아직 필터를 클릭하지 않았기 때문에 존재하지 않습니다.

필터 코드 :

$('#filters a').click(function(){ 

    if($(this).is('.active')) { 
     // don't do anything while class is active 
    } 
    else { 
     $('#filters a').removeClass('active'), 
     $(this).addClass('active'); 
    } 

}); 

스크롤 코드 :

function fixDiv() { 
    var $div = $(".active"); 
    if ($(window).scrollTop() > $div.data("top")) { 
     $('.active').addClass('fixednav'); 
    } 
    else { 
     $('.active').removeClass('fixednav'); 
    } 
} 

$(".active").data("top", $(".active").offset().top); 
$(window).scroll(fixDiv); 
+0

? $ (". 활성"). 데이터 ("위쪽", $ ("활성"). 오프셋(). 지금 당장 가지고있는 것을 보여주기 위해 바이올린을 설치하는 것이 좋습니다. 나는이 라인이 단지 한 번만 설정되고 링크를 클릭했을 때 재설정되지 않는다고 느끼고있다. – Neaox

+0

가능한 해결책은 내 대답을 참조하십시오. – Neaox

답변

0

은 다음과 같이 당신의 클릭 기능 내부에 $(".active").data("top", $(".active").offset().top); 이동하십시오 :

코드의 나머지 부분과 관련이 라인은
$('#filters a').click(function(){ 
    var $this = $(this); 
    if(!$this.is('.active')) 
    { 
     $('#filters a').removeClass('active').removeData("top"); 
     $this.addClass('active').data("top", $this.offset().top); 
    } 
}); 
+0

당신은 그 폭탄 녀석입니다, 완벽하게 작동합니다, 고마워요! 또한 If without Else를 사용하는 방법을 보여 주신 것에 대해 감사드립니다. – doooooooom

+0

걱정하지 않으셔도됩니다. 링크가 선택되지 않았 으면 같은 포획 오류가 발생하므로'$ div.length> 0'을'fixDiv' 함수에서 검사하고 싶을 수도 있습니다.'$ ('.active')' 링크를 클릭하지 않으면 아무 요소도 반환하지 않습니다. $ div.data ("top"))'if ($ div.length> 0 && $ (window) .scrollTop()> $ div.data (" top "))'' – Neaox

0

음, $('.active') 요소의 집합이 아니라 하나의 요소를 반환합니다.

$('.active:first')과 같은 것을 사용해보세요.

+0

아마도 명확하지 않았습니다. 필터 링크를 클릭하면 클릭 한 링크에만 "활성"클래스가 추가됩니다. 그 부분은 잘 작동합니다. 문제가있는 부분은 클릭 한 후에 정의 된 요소에 클래스를 추가하는 것입니다. – doooooooom