Я знаю, что это выглядит довольно большой кусок кода, однако эта функция просто работает, указав три простых варианта;ваш «верхний» элемент floater, ваш «target» (floater) и «reference» элемент для установки границ, он также автоматически заботится о верхнем и нижнем позициях, без css.
function scrollFloater(marginTop, reference, target, fixWhidth = false){
var processScroll = function(){
var from = reference.offset().top - marginTop;
var to = reference.offset().top + reference.outerHeight() + marginTop - target.outerHeight();
var scrollTop = $(this).scrollTop();
var bottom = to - reference.offset().top + marginTop;
if( fixWhidth )
target.css('width', target.width());
if( scrollTop > from && scrollTop < to )
target.css('position', 'fixed').css('top',marginTop);
else if( scrollTop >= to )
target.css('position', 'absolute').css('top', bottom);
else
target.css('position', '').css('top',marginTop);
}
$(window).scroll(function(){ processScroll(); });
processScroll();
}
И этокак бы вы его использовали:
$(function() {
scrollFloater(41, $('.box.auth.register'), $('.plans-floater'), true);
});
Надеюсь, это кому-нибудь поможет.