나는 똑같은 것을 찾고 있었다. 그래픽과 유사한 질문을 찾기 위해 모호한 용어를 검색해야했던 것 같습니다. 내가 찾던 바로 그것 인 것으로 밝혀졌습니다. 플러그인을 찾을 수 없어서 직접 만들기로 결정했습니다. 누군가가 이것을보고 다듬기를 바랍니다.
여기 내가 사용하고있는 빠르고 더러운 샘플 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는 내 사이드 바에서 가장 하단에있는 요소입니다.
- # 마스트 헤드의 높이를 사용하고 있습니다. 고정 헤더이기 때문에이를 보완해야합니다.
- 반응 형 디자인을 사용하고 있으며 더 작은 화면에서 활성화되는 것을 원하지 않기 때문에 col-2 float에 대한 검사가 있습니다.
누군가 이것을 조금 더 다듬을 수 있다면 좋을 것입니다.