2011-11-10 4 views
2

나는이 코드를 시도하고있다 :스크롤 - JQuery와 - 특정 위치

function goToByScroll(id){ 

     id = id.replace("link", ""); 

     $('html,body').animate({ 
      scrollTop: $("#"+id).offset().top}, 
      'slow'); 
    } 

    $("#sidebar > ul > li > a").click(function(e) { 

     e.preventDefault(); 

     goToByScroll($(this).attr("id"));   
    }); 

문제는 내가 목록의 특정 요소에 클릭하면 스크롤이 창 상단에 올라가 있다는 것입니다. 하지만 내 경우에는 상단에 고정 된 div가 있으므로이 div에 의해 내용이 숨겨집니다. 글쎄, 나는 div 앞에 스크롤을 멈추고 싶다.

어떤 아이디어가 있습니까?

답변

5

demo

당신은 scrollTop 속성에서 해당 빼기 후 (예를 들어, ID = "헤더") 상단 바에게 ID를주고해야합니다

$('html,body').animate({ 
    scrollTop: ($("#"+id).offset().top-$('#header').outerHeight(true))+'px'}, 
    'slow'); 

Here is a working example.

+0

사실 조금 생각한 후에 여기서 'outerHeight (true)'를 사용한다고 생각합니다. 그래서'# header '의 여백은 존중된다. – Kato

4
function goToByScroll(id){ 

     id = id.replace("link", ""); 

     $('html,body').animate({ 
      scrollTop: ($("#"+id).offset().top - $("#YOUR_FIXED_DIV").height()) }, 
      'slow'); 
    } 

    $("#sidebar > ul > li > a").click(function(e) { 

     e.preventDefault(); 

     goToByScroll($(this).attr("id"));   
    }); 
+2

확실히 작동합니다. outerHeight(), 안쪽 여백 (margin)을 허용하기 위해 가능한 outerHeight (true)를 원한다고 생각합니다. – Kato