2011-11-10 94 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之前停止滾動。

有什麼想法嗎?

demo

回答

5

你需要給最上面一欄的ID(例如ID = 「報頭」),然後減去從scrollTop的屬性:

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

Here is a working example

+0

實際上,經過一番思考,我想我會在這裏使用'outerHeight(true)',這樣'#頭部'的任何邊距都會受到尊重。 – 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(),但是爲了允許填充,並且可能的outerHeight(true)允許邊距;) – Kato