使侧边栏在页面滚动时保持粘性

时间:2019-06-28 14:32:52

标签: jquery html css sticky

我正在尝试使页面的侧边栏在页面滚动时保持粘性。

我尝试了不同的解决方案,但是它不起作用...

这是我最后一次尝试:

$( 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

任何人都可以帮我吗?

非常感谢。

1 个答案:

答案 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中找到。