Как было также рекомендовано в комментарии robinvrd, я бы использовал фиксированную позицию, поскольку это позволяет избежать трудностей с вычислением новой Y-позиции (лучше сказать, что браузер позаботится об этом внутренне). Поэтому, если вы хотите, чтобы ваш стикер прокручивался до тех пор, пока он не достигнет конца порта просмотра, а затем остался видимым сбоку, это было бы решением:
$(window).scroll(function() {
// scroll event
var windowTop = $(window).scrollTop(); // returns number
if (stickyTop < windowTop + stickOffset) {
$sticky.css({ position: "fixed", top: 0, right: 0 });
} else {
$sticky.css({ position: "absolute", top: "initial", right: 0 });
}
});
Измененный код можно найти в упомянутом Codepen .