2011-08-31 18 views
0

我已經在那個包含像這樣的內容的其餘鏈接achors頂部有一個fixed導航欄網站:如何在頂部使用具有固定元素的哈希來平滑滾動瀏覽器窗口?

<header style="position:fixed"> 
    <a href="#hello">Scroll to Headline Hello</a> 
</header> 
<article> 
    <h1><a name="hello" id="hello">Hello</a><h1> 
</article> 

當用戶點擊該鏈接後,相應的標題被遮蔽標題,因爲瀏覽器將它直接放置在視口的開頭。我試圖使用這裏描述的csstricks的jQuery腳本來平滑地滾動到targetOffset + heightOfHeader,但這只是讓內容隨機跳轉。

下面是腳本:

$(document).ready(function() { 
    function filterPath(string) { 
    return string 
    .replace(/^\//,'') 
    .replace(/(index|default).[a-zA-Z]{3,4}$/,'') 
    .replace(/\/$/,''); 
    } 
    var locationPath = filterPath(location.pathname); 
    var scrollElem = scrollableElement('html', 'body'); 

    $('a[href*=#]').each(function() { 
    var thisPath = filterPath(this.pathname) || locationPath; 
    if ( locationPath == thisPath 
    && (location.hostname == this.hostname || !this.hostname) 
    && this.hash.replace(/#/,'')) { 
     var $target = $(this.hash), target = this.hash; 
     if (target) { 
     var targetOffset = $target.offset().top; 
     $(this).click(function(event) { 
      event.preventDefault(); 
      $(scrollElem).animate({scrollTop: targetOffset}, 400, function() { 
      location.hash = target; 
      }); 
     }); 
     } 
    } 
    }); 

    // use the first element that is "scrollable" 
    function scrollableElement(els) { 
    for (var i = 0, argLength = arguments.length; i <argLength; i++) { 
     var el = arguments[i], 
      $scrollElement = $(el); 
     if ($scrollElement.scrollTop()> 0) { 
     return el; 
     } else { 
     $scrollElement.scrollTop(1); 
     var isScrollable = $scrollElement.scrollTop()> 0; 
     $scrollElement.scrollTop(0); 
     if (isScrollable) { 
      return el; 
     } 
     } 
    } 
    return []; 
    } 

}); 

任何幫助,將不勝感激。

+0

您標記使用JavaScript你的問題,但你說的是純JS或者您使用的圖書館嗎?例如,使用jQuery就可以很容易地完成這樣的事情。 –

+0

好的,補充說。我想,對於任何正在查看csstricks的JavaScript的人來說,這都是顯而易見的。 –

+0

我想你'可以'使用jQuery選擇器來查找所有的錨點位置,然後使用scrollTo以增量? – Lloyd

回答

0

我看到你用jquery標記問題。我喜歡使用scrollTo插件來完成此操作。

http://flesler.blogspot.com/2007/10/jqueryscrollto.html

+0

如何使用它來滾動視口並尊重標題的固定位置? –

+0

對不起,我沒有看到你的問題的一部分。我沒有以這種方式嘗試scrollTo或localScroll。你試過了嗎? $ .scrollTo(「#hello」)? – ScottE

相關問題