在滚动到jQuery中的某个点时使内容变得粘滞

时间:2016-01-18 00:12:31

标签: jquery scroll fixed sticky

我的div设置为position: relative。当窗口顶部到达时,它变为fixed。 div存在于一个容器中(下例中为蓝色),当它到达其父容器(蓝色)的底部时,我想将其设置回relative

这是我的简化代码和我的Fiddle

HTML:

<div class="green"></div>

<div class="blue">
  <div class="sticky">Sticky</div>
</div>

<div class="red"></div>

CSS:

.blue {
  background-color: blue;
  height: 500px;
}

.sticky {
  width: 200px;
  background-color: yellow;
  text-align: center;
  top: 0;
}

.red {
  background-color: red;
  height: 800px;
}

.green {
  background-color: green;
  height: 200px;
}

和jQuery:

$(document).ready(function() {
  var stickyTop = $('.sticky').offset().top;

  $(window).scroll(function() {
    var windowTop = $(window).scrollTop();

    if (stickyTop < windowTop) {
      $('.sticky').css('position', 'fixed');
    } else {
      $('.sticky').css('position', 'relative');
    }
  });
});

2 个答案:

答案 0 :(得分:3)

if声明中添加以下条件:

$(".blue").height() + $(".blue").offset().top > windowTop

您的代码应如下所示:

$(document).ready(function() {
  var stickyTop = $('.sticky').offset().top;

  $(window).scroll(function() {
    var windowTop = $(window).scrollTop();
    if (stickyTop < windowTop && $(".blue").height() + $(".blue").offset().top - $(".sticky").height() > windowTop) {
      $('.sticky').css('position', 'fixed');
    } else {
      $('.sticky').css('position', 'relative');
    }
  });
});

请参阅updated JSFiddle

答案 1 :(得分:-1)

这是一个解决方案:

$(window).scroll(function() {
       var navpos1 = $('.header').offset().top(); 
           if (navpos1) {
              $('body').addClass('fixedHd');
            } else {
                 $('body').removeClass('fixedHd');
                 }
  });