我一直在寻找完全相同的东西。显然,我需要搜索一些晦涩的术语,以便找到与图形类似的问题。原来这正是我在寻找的东西。我找不到任何插件,所以我决定自己做。希望有人能看到并完善它。
这是我正在使用的快速而肮脏的示例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浮动,并且不想在较小的屏幕上激活它
如果有人可以进一步完善它,那就太好了。