2011-12-13 3 views
15

sectionタグは、divにオーバーフローがhiddenに設定されています。コードは、この線に沿っている:jQueryアニメーションスクロールトップ


<div id="viewport"> 
    <section> 
     content 
    </section> 
    <section> 
     content 
    </section> 
</div> 

私は、対応するリンクがメニューに押されたときにdiv内に含まれるsectionsをスクロールできるようにしたいので、それは次のように設定しています。私はこの機能を持っている:

sectionsのサイズが異なるので、私は #viewportのdivのサイズを変更するために使用

$('#mn a').click(function(){ 
    var aHref = $(this).attr("href"); 
    var sectionHeight = $('section'+aHref+'').height(); 
    $('#viewport').height(sectionHeight); 
}); 

。このスクロール部分をその関数に入れようとすると、次のようになります。


$('body,html').animate({scrollTop: $(aHref).offset().top}, 800); 

ページ全体がスクロールします。 $('body,html')$('section, #viewport')に置き換えようとすると、div内がスクロールしますが、正しくは行われません。

このライブの例はhereです。私はそれが.offset()か、私が.animate()に渡しているものと関係があると思っていますが、私は非常に異なるいくつかのことを試しましたが、役に立たないものです。誰かが正しい方向に私を向けるか、私が間違ったことを教えてもらえますか?

答えて

11

を試してみてください。

クリックで$('section'+aHref+'').position().topをリクエストした場合、返される位置はscrollTopの値から変更されます。

準備完了イベントですべての高さ位置を取得できます。

(そうscrollTop0である)または、あなたが位置の値をサニタイズすることができます:あなたがこれを行うには、単純なjQueryプラグインを望むなら、あなたは現在、30の以上の緩和スタイルをサポートしている(AnimateScroll)しようとすることができ

$("section#skills").position().top + $("#viewport").scrollTop() 
+0

ありがとうございます。値をサニタイズすると完璧に機能しました! –

+0

それは私のためにも働いた。私はfirefoxで試しました。 – OMG

8

まず、ページをページの上部にスクロールするには、アンカーのデフォルト動作を禁止する必要があります。これは、イベントハンドラー内のイベントオブジェクトに対してpreventDefault()メソッドを呼び出すことで実行できます。問題はposition()作品は、それがscrollTopに関連するトップ/高さを返す方法である。この

$('#mn a').click(function(e){ 
    e.preventDefault(); 

    var aHref = $(this).attr("href"); 
    var top = $('section'+aHref+'').position().top; 
    $('#viewport').animate({scrollTop: top}, 800); 
}); 
+0

私はそこに 'e.preventDefault()'を持っていましたが、何らかの理由で何かをつぶしていると思って取り出しました。残念ながら、あなたが提案したソリューションはうまくいきません。 –

+0

'sectionHeight'に警告し、何を得ることができますか?最初のものは – ShankarSangoli

+0

255です。それは前後にスクロールしますが、決して完全に下には移動しません。 –

-1

too

関連する問題