私はまったく同じものを探していました。どうやら私はグラフィックで同様の質問を見つけるためだけにいくつかのあいまいな用語を検索する必要がありました。それがまさに私が探していたものであることがわかりました。プラグインが見つからなかったので、自分で作ることにしました。うまくいけば、誰かがこれを見て、それを洗練するでしょう。
これが私が使っている速くて汚いサンプルhtmlです。
<div id="main">
<div class="col-1">
</div>
<div class="col-2">
<div class="side-wrapper">
sidebar content
</div>
</div>
</div>
これが私が作ったjQueryです:
var lastScrollPos = $(window).scrollTop();
var originalPos = $('.side-wrapper').offset().top;
if ($('.col-2').css('float') != 'none') {
$(window).scroll(function(){
var rectbtfadPos = $('.rectbtfad').offset().top + $('.rectbtfad').height();
if ( lastScrollPos > $(window).scrollTop() ) {
if ($('.side-wrapper').css('position') == 'fixed') {
$('.side-wrapper').css({
'position': 'absolute',
'top': $('.side-wrapper').offset().top + 'px',
'bottom': 'auto'
});
}
if ( ($(window).scrollTop() + $('#masthead').height()) < originalPos ) {
$('.side-wrapper').css({
'position': 'relative',
'top': 'auto',
'bottom': 'auto'
});
}
else if ( ($(window).scrollTop() + $('#masthead').height()) < $('.side-wrapper').offset().top && $('.side-wrapper').css('position') == 'absolute' ) {
$('.side-wrapper').css({
'position': 'fixed',
'top': 15 + $('#masthead').height() + 'px',
'bottom': 'auto'
});
}
}
else {
if ($('.side-wrapper').css('position') == 'fixed') {
$('.side-wrapper').css({
'position': 'absolute',
'top': $('.side-wrapper').offset().top + 'px',
'bottom': 'auto'
});
}
if ( ($(window).scrollTop() + $(window).height()) > rectbtfadPos && $('.side-wrapper').css('position') != 'fixed' ) {
$('.side-wrapper').css({
'width': $('.col-2').width(),
'position': 'fixed',
'bottom': '0',
'top': 'auto'
});
}
}
lastScrollPos = $(window).scrollTop();
});
}
いくつかの注意:
- .rectbtfadは私のサイドバーの一番下の要素です
- #mastheadの高さはスティッキーヘッダーなので、それを補正する必要があるため、使用しています。
- レスポンシブデザインを使用していて、小さい画面でこれをアクティブにしたくないので、col-2floatのチェックがあります
誰かがこれをもう少し洗練することができれば、それは素晴らしいことです。