在到达页脚时使固定位置div停止

时间:2016-11-02 18:27:14

标签: javascript jquery

我有一个侧边菜单(.link-panel)。内部.link-panel是一个div (.cover),其中包含.link-panel的内容。 .cover是一个固定的div,以便在用户滚动时链接可以移动。我面临的唯一问题是我的底部有一个页脚,每当我向下滚动时,cover div就会出现在.footer之上。我试图让.cover在到达页脚时停止。这样.footer.cover不会重叠。我尝试使用一些jQuery来解决这个问题,但我的技术不起作用。它产生了非常奇怪的结果。有时,某些链接位于窗口上方且无法显示,有时当您向下滚动到.footer时,.link-panel在您滚动时不会再次显示。您可以查看并试验我创建的here with the jsFiddle

HTML

<div class="container">

  <div class='control_panel'>
    <div class='control_title'>
      <h2>Your Settings</h2>
    </div>

    <div class='control_settings'>

    </div>
  </div>

  <div class="link-panel">
  <div class="cover">


    <ul>


      <li> Dashboard</li>
      <hr>
      <li> Blog</li>
      <hr>
      <li><span><b>|</b> Settings</span></li>
      <hr>
      <li> Contact Us</li>


    </ul>
      </div>
  </div>
  <!--End of link panel div-->
</div>

<div class='footer'>

</div>

CSS

.container {
  display: block;
  margin: 0px auto;
  width: 100%;
  padding-left: 30%;
  box-sizing: border-box;
  position: relative;
}

.footer {
  display: block;
  width: 100%;
  height: 500px;
  background-color: black;
  margin-top: 0px;
}

html,
body {
  position: relative;
  height: 100%;
  background-color: #f2f2f2;
}

.control_panel {
  position: relative;
  display: inline-block;
  width: 60%;
  margin-left: 0px;
}

.control_title {
  display: block;
  background-color: white;
  height: 100px;
  margin-bottom: 30px;
}

.control_settings {
  display: block;
  background-color: white;
  height: 900px;
  width: 900px;
}

.link-panel {
  position: absolute;
  float: left;
  width: 30%;
  height: 100%;
  background-color: #333333;
  left: 0;
  top: 0;
}

.cover{
   position: fixed;
}
.link-panel ul {
  list-style-type: none;
  font-size: 19px;
  margin-top: 35px;
}

.link-panel li {
  margin-top: 15px;
}

的jQuery

function checkOffset() {
  var a=$(document).scrollTop()+window.innerHeight;
  var b=$('.footer').offset().top;
  if (a<b) {
    $('.cover').css('bottom', '-14');
  } else {
    $('.cover').css('bottom', (-14+(a-b))+'px');
  }
}
$(document).ready(checkOffset);
$(document).scroll(checkOffset);

如何使用.cover在用户滚动时上下移动,但在到达.footer时停止,但当用户再次向上滚动时.cover }?

1 个答案:

答案 0 :(得分:0)

编辑:希望现在它也适用于Chrome。

我为你的案子做了一个小提琴:https://jsfiddle.net/g8ctha2o/5/

告诉我它是否适合你。

基本上,您要检查滚动事件,即菜单的下边缘的位置值小于页脚的上边缘。一旦这不再成立,你就会达到一个滚动阈值,你可以用jQuery将其位置从fixed更改为absolute。

var menuBottom,
  footerTop = $('.footer').offset().top,
  positionChanged = false,
  scrollThreshold;

$('.scrollable').on('scroll', function() {
  menuBottom = $('.scrollable').scrollTop() + $('.menu').offset().top + $('.menu').outerHeight();
  if (!positionChanged) {
    if (menuBottom + 5 >= footerTop) {
      scrollThreshold = $('.scrollable').scrollTop();
      $('.menu').css({
        visibility: 'hidden',
        position: 'absolute',
        top: menuBottom - $('.menu').outerHeight() - 5,
        right: 35,
        visibility: 'visible'
      });
      positionChanged = true;
    }
  } else {
    if (scrollThreshold > $('.scrollable').scrollTop()) {
      $('.menu').css({
        position: 'fixed',
        top: 450,
        right: 60
      });
      positionChanged = false;
    }
  }
});