10
jQueryで固定ヘッダーを作成する際に特に問題があります。私はウェブ上で一般的に使用されているスニペットを試しましたが、私はどこでも同じバギーを知っていました。スティッキーヘッダー - スクロールのバギージャンプ
スティッキーヘッダーは、position: fixed
とposition: static
の間でジャンプします(スティッキーエフェクトの呼び出しよりも少しスクロールできるまで)。
HTML:
<header>
<div id="not-sticky"></div>
<div id="sticky"></div>
</header>
<div id="content"> ...
のjQuery:
var $sticky = $("#sticky");
var offset = $sticky.offset();
var stickyTop = offset.top;
var windowTop = $(window).scrollTop();
$(window).scroll(function() {
windowTop = $(window).scrollTop();
if (windowTop > stickyTop) {
$sticky.css({
position: 'fixed',
top: 0
});
}
else {
$sticky.css({
position: '',
top: ''
});
}
});
CSS:
header {
width: 100%;
}
#not-sticky {
padding: 50px 0;
width: 100%;
}
#sticky {
padding: 24px 0;
position: relative;
width: 100%;
z-index: 25;
}
ドキュメントの高さを一定に保つために#sticky
と同じ高さの#not-sticky
にマージンボトムを試しましたが、同じジャンプスティッキー効果が発生しました。
それを修正するためのアイデアはありますか?
ありがとうございました。私は、折り返しdivを付けずにきれいなマークアップをつけることができると期待していましたが、それが発生します。 –
@TimoMよろしくお願いします!再利用可能な関数を作成しましたので、必要に応じて 'DOM ready'、' window load'でも使用できます。ご存知のように、イメージはゆっくりと読み込まれ、スクロール値を再確認すると便利な場合があります。そのため、訪問中にページがスクロールされることがあります。 –
ええ、ありがとう!私はすでにjQueryを 'DOM ready'にラップしましたが、この' sticky() '関数は本当にきれいです! –