我正在尝试使页面的侧边栏在页面滚动时保持粘性。
我尝试了不同的解决方案,但是它不起作用...
这是我最后一次尝试:
$( document ).ready(function() {
console.log( "document ready!" );
var $sticky = $('.sticky');
var $stickyrStopper = $('.sticky-stopper');
if (!!$sticky.offset()) { // make sure ".sticky" element exists
var generalSidebarHeight = $sticky.innerHeight();
var stickyTop = $sticky.offset().top;
var stickOffset = 0;
var stickyStopperPosition = $stickyrStopper.offset().top;
var stopPoint = stickyStopperPosition - generalSidebarHeight - stickOffset;
var diff = stopPoint + stickOffset;
$(window).scroll(function(){ // scroll event
var windowTop = $(window).scrollTop(); // returns number
if (stopPoint < windowTop) {
$sticky.css({ position: 'absolute', top: diff });
} else if (stickyTop < windowTop+stickOffset) {
$sticky.css({ position: 'fixed', top: stickOffset });
} else {
$sticky.css({position: 'absolute', top: 'initial'});
}
});
}
});
这是我页面的源代码:https://codepen.io/anon/pen/bPareG
任何人都可以帮我吗?
非常感谢。
答案 0 :(得分:1)
正如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中找到。