Ничего сложного в том, чтоб написать свою реализацию тут нет. Надо лишь понимать как складывать, умножать, делить и вычитать, чтоб посчитать позицию плавающего блока относительно контейнера.
Немного кода для размышления, jquery, но легко и на нативный перевести, ничего не изменится
function constrain(n, low, high) {
return Math.max(Math.min(n, high), low);
}
let padding = 218;
let wrapperRect = $wrapper[0].getBoundingClientRect();
let offset = parseInt($nav.attr("data-sticky-offset"));
if (wrapperRect.top < offset) {
let y = constrain(window.pageYOffset, 0, $target.height() - $nav.height() + $target.offset().top - offset);
$nav.addClass("is-floating");
if (y === $target.height() - $nav.height() + $target.offset().top - offset) {
$nav.addClass("on-end-point");
}
else {
$nav.removeClass("on-end-point");
}
$nav.css({
width: $nav.parent().width() + "px"
});
}
else {
$nav.removeClass("is-floating");
$nav.attr("style", "");
}