2011-02-07 16 views
1

I「固定」ヘッダを備えサイトは、問題はそれが本当にページラ「http://mysite.com/#lower_div_on_the_page」それもページ上のスクロール開始位置を決定するJavascript?

ですさらに下のリンクリンクを台無しということです持っています

if (URL has #hashtag) {starting scroll position = normal position + (my_header_height)} 

このようなことを行うにはjavascriptを使用できますか?

編集: すべての返信をありがとう...本当に感謝しています。参考までに、私はjQueryを使いこなしています... jQueryを使ってどうすればいいですか?

+0

jQueryを使用している場合は、タグまたは質問テキストに指定されていることを確認して、ユーザーが一般的な質問に時間を費やすことがないようにしてください。あなたが機能をつなぎ合わせるために使用する必要がjQueryのAPI関数のための私の応答を参照してください。 –

+0

おかげで、私は間違いなくそれが... jQueryのを指定していないため、私のせいだった:( – Brian

答えて

1

はい、可能です。ここで

はあなたが取る必要がある手順です。

  • はDOM Loadedイベントハンドラを設定します。これを行う方法は2つ以上あり、ここにはlink to a web page that explains how to do thisがあります。また、jQuery(.ready()を参照)やPrototype.js(observe extensionを参照)などのjavascriptフレームワークを使用している場合は、はるかに簡単です。

  • DOM読み込みイベントハンドラ関数では、ハッシュタグのURL(window.location)を解析します。

    var hashTag = window.location.href;
    hashTag = hashTag.substr(hashTag.indexOf('#') + 1);
    // now hashTag contains the portion of the URL after the hash sign

  • あなたはアンカータグを認識した場合、DOMツリーまたは任意のロジック使用したいでその要素の位置に基づいて、所望のスクロール位置を計算。ここでも、jQuery(.offset()を参照)またはPrototype.js(cumulativeScrollOffsetを参照)は、スクロールする正しいオフセットを決定するのに役立つはずです。

  • ページのスクロールを設定します。ここでもjQueryの(.scrollTop()を参照)またはprototype.jsの(scrollToを参照)の両方これを支援するための拡張機能を持っています。ここで

は、jQueryの例だ:それは明らかに簡単になるだろう、とあなたが必要となるのjQueryを使用して

if(window.location.hash != ''){ 
    elementOffset = document.getElementById(window.location.hash.substr(1)).offsetTop; 
    window.scrollTo(0,elementOffset + my_header_height); 
} 

$(document).ready(function() { 
    var hashTag = window.location.href; 
    if(hashTag.indexOf('#') > 0) 
    { 
     hashTag = hashTag.substr(hashTag.indexOf('#')); 

     // now get the element's offset relative to the document 
     var offsetTop = $(hashTag).offset().top; 

     // and finally, scroll the document to that offset 
     $(document).scrollTop(offsetTop); 
    } 
}); 
+0

素晴らしい実現!...私は間違いなくjQueryのを使用しています!どのようにそれは、jQueryを使って見えるのでしょうか?私の悪い概説の質問とあなたの忍耐のため – Brian

+0

感謝を!これは、これは本当に良いです!本当に感謝して、これは何を愛する... – Brian

1

は確実である、あなたは、のような単純な何かができます要素や要素を含むことに応じて余分なオフセットを得ることができますが、それはあなたを起動させるはずです。

+0

素晴らしいソリューションですが、むしろ「.getElementById( 『hashtag_id』)を」使用するよりも、それはすべてのハッシュタグIDに適用する方法はありますか? – Brian

+0

はい、申し訳ありませんが、私はそれ以前に、elementOffset行を編集して、あなたにとってもう少し役に立つと説明しました。 – musicinmyhead

+0

ありがとう、私のための治療を働いた! :D – ryryan

関連する問題