2013-05-13 15 views
6
私は、ユーザーが「#」

jQueryの:scrollTopスプライト

$(document).ready(function(){ 
    $('a[href^="#"]').on('click',function (e) { 
     e.preventDefault(); 
     var target = this.hash, 
     $target = $(target); 
     $('html, body').stop().animate({ 
      'scrollTop': $target.offset().top 
     }, 900, 'swing', function() { 
      window.location.hash = target; 
     }); 
    }); 
}); 

私は40ピクセルについて追加する必要があるとそのhref始まるそのリンクをクリックしたときの動きを滑らかにするために、次のコードを使用してい

に追加ピクセルを追加しますscrollTop値に設定すると、停止点がコンテンツをカバーします。 (コードの終わりに向かって40に気づく)私はこれにコードを変更し、それはそれをやっているようには見えません。

$(document).ready(function(){ 
    $('a[href^="#"]').on('click',function (e) { 
     e.preventDefault(); 
     var target = this.hash, 
     $target = $(target); 
     $('html, body').stop().animate({ 
      'scrollTop': $target.offset().top + 40 
     }, 900, 'swing', function() { 
      window.location.hash = target; 
     }); 
    }); 
}); 
+0

を追加することにより

は、あなたは正しい場所に '+ 40'を追加しました。何が起きているのですか? –

+0

私はその40バックを追加しました。どうぞご覧ください。どんな値を追加しても、同じ場所で停止します。 – farjam

+0

'$ target.offset()。top'が期待値を返すことを確認しましたか? –

答えて

2

あなたが実際-40になりたいオフセット+40があるため機能していませんアニメーションが完了したら、ブラウザにはidの要素に行くデフォルトの反応が返されます。window.location.hash

スクロールする要素にその行を削除するか、次のCSSを追加することができます。

padding-top: 40px; 
margin-top: -40px; 

私は後半の答えを知っているが、解決策を求めている誰かがこれを試すことができFIDDLE

+0

ありがとう、あなたの提案に従って、私のターゲットに "ターゲット"のクラスを追加するために私のjsを微調整しました。しかし、私の ".targeted" divのCSSを調整することはできますが、私のCSSで追加されたギャップが表示されるため、上下にスクロールし始めると、ページが正しく表示されません。私は意味があると思う。 – farjam

+0

'window.location.hash = target;'行はコード内の他の関数にとって重要ですか? –

+0

いいえ、そうではありません。それは取り除くことができます。 – farjam

13

を参照してください。 .top +(-40)を行いますトリック

$('html, body').stop().animate({ 
    'scrollTop': $target.offset().top + (-40) 
}, 900, 'swing', function() { 
    window.location.hash = target; 
}); 
+0

これは良い解決策ですが、CSSクラスを切り替えるのは面倒ではありません。 –

関連する問題