2011-11-10 72 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