元素需要粘在底部(位置:绝对)与 DOM 的一部分(位置:相对)

问题描述 投票:0回答:1

我有一个要求,元素需要粘在底部(位置:绝对)与 DOM 的一部分(位置:相对)

当 elementA 和 elementB 不在视图中时,UseCase“页脚”粘在底部(位置:绝对)。当 elementA 不在视图中时,“footer”相对位置,elementB 在视图中。当 elementA、elementB 都在视图中时,“页脚”的相对位置。

试过航点,偏移量。当滚动时 elementB 进入视图时,页脚会抖动闪烁。我认为观察者 api 在这里没有帮助。

javascript floating
1个回答
0
投票

很难准确知道您在使用 Observer API 时遇到了什么问题,但是如果 position: sticky 对您来说不够灵活,那么

IntersectionObserver
听起来确实是您最好的选择。

你提到页脚所以也许你想要

position: fixed
而不是
position: absolute

const b = document.getElementById("b");
const sticky = document.getElementById("sticky");

const observer = new IntersectionObserver(([entry]) => {
  if (entry?.isIntersecting) {
    // b is fully visible
    sticky.style.position = "relative";
    sticky.style.bottom = "";
  }
  else {
    sticky.style.position = "fixed";
    sticky.style.bottom = 0;
  }
}, { threshold: 1.0 });

observer.observe(b);
body {
  margin: 0;
}

.content {
  height: 100px;
  line-height: 100px;
  border: 1px solid black;
}

#a {
  height: 50px;
  background: red;
}

#b {
  height: 50px;
  width: 200px;
  background: green;
}

#sticky {
  left: 200px;
  width: 200px;
  position: relative;
}
#sticky div {
  position: absolute;
  top: -50px;
  height: 50px;
  width: 100%;
  background: orange;
}
<html>
<body>
<div class="content">content</div>
<div class="content">content</div>
<div class="content">content</div>
<div class="content">content</div>
<div class="content">content</div>
<div class="content">content</div>
<div class="content">content</div>
<div id="a">This is A</div>
<div class="content">content</div>
<div id="b">This is B</div>
<div id="sticky">
  <div>Sticky footer</div>
</div>
<div class="content">content</div>
<div class="content">content</div>
<div class="content">content</div>
<div class="content">content</div>
<div class="content">content</div>
<div class="content">content</div>
<div class="content">content</div>
<div class="content">content</div>
</body>
</html>

© www.soinside.com 2019 - 2024. All rights reserved.