在 IE 11 中离屏时无法使元素粘在底部,就像在 css sticky 中一样

Not able to make element stick to the bottom when offscreen in IE 11, just like in css sticky

我正在尝试复制与此相同的行为 codepen 在 IE 11 中(没有 css 置顶)

我能够在开始时检测到项目何时离开屏幕:

if (
  $(".main-content").height() + $(".main-content").offset().top <
  $(".main-footer").offset().top
)

但是当它到达滚动末尾(在本例中为页面)时,我没有设法检查它何时再次离开屏幕。减去滚动条来确定元素是否在屏幕外可能很简单,我只是被卡住了...

这里是 codepen 我现在卡住的地方。

IE doesn't support <main>所以在IE 11中不能使用这个标签。可以通过JavaScript监听滚动条的变化,然后根据class的位置改变它的元素。

这里是你可以参考的代码:

$(document).scroll(function() {
  var scroH = $(document).scrollTop();
  var viewH = $(window).height();
  var contentH = $(document).height();

  $('.main-footer').addClass('main-footer1')

  if (scroH > 100) {}
  if (contentH - (scroH + viewH) <= 100) { // The height from the bottom is less than 100px
  }
  if (contentH <= (scroH + viewH + 100)) {
    $('.main-footer').removeClass('main-footer1')
    $('.main-footer').addClass('main-footer2')
  } else {
    $('.main-footer').addClass('main-footer1')
    $('.main-footer').removeClass('main-footer2')
  }

});
body {
  color: #fff;
  font-family: arial;
  font-weight: bold;
  font-size: 40px;
}

.main-container {
  max-width: 600px;
  margin: 0 auto;
  border: solid 10px green;
  padding: 10px;
  margin-top: 40px;
}

.main-container * {
  padding: 10px;
  background: #aaa;
  border: dashed 5px #000;
}

.main-container *+* {
  margin-top: 20px;
}

.main-header {
  height: 50px;
  background: #aaa;
}

.main-content {
  min-height: 1000px;
}

.main-footer {
  border-color: red;
}

.main-footer1 {
  position: fixed;
  bottom: 0px;
  margin: 0 auto;
  width: 570px;
}

.main-footer2 {
  position: relative;
  margin-top: 20px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="main-container">
  <header class="main-header">HEADER</header>
  <div class="main-content">MAIN contentH</div>
  <footer class="main-footer">footer</footer>
</div>

IE 11 中的结果: