我试图创建一个粘在一边的元素,停留在顶部的其他项目在同一容器中滚动时。但是,我在执行过程中遇到了一些问题。下面的代码尝试创建一个粘在一边的元素,当滚动时,该元素应该停留在容器中其他项目的顶部。然而,aside元素要么不粘在一起,要么与其他项目重叠。
我希望sticky aside元素粘在容器的顶部,并随着页面滚动,直到到达容器的末尾,在那里它应该停止滚动。它不应与容器中的其他项目重叠。
下面是我尝试过的代码:
window.addEventListener('scroll', function() {
var stickyAside = document.getElementById('sticky-aside');
var container = stickyAside.closest('.container');
var containerTop = container.offsetTop;
var containerBottom = containerTop + container.offsetHeight;
var asideHeight = stickyAside.offsetHeight;
if (window.pageYOffset > containerBottom - asideHeight) {
stickyAside.classList.add('sticky');
} else {
stickyAside.classList.remove('sticky');
}
});
#sticky-aside {
width: 100%;
top: 0;
}
.row {
position: relative;
}
.sticky {
position: fixed;
width: 100%;
top: 0;
}
<div class="container mt-5">
<div class="row">
<!-- My posts section -->
</div>
</div>
<div class="container mt-5">
<div class="row mt-5 border-top border-dark pt-5">
<aside class="col-sm-4" id="sticky-aside">
<!-- Sticky aside content -->
</aside>
</div>
</div>
2条答案
按热度按时间3b6akqbq1#
试试这个:
JS(它检查窗口的滚动位置是否在容器的边界内,不包括粘在一边的元素的高度):
CSS(将sticky aside元素放置在顶部,而不指定固定高度):
gxwragnw2#
我可能误解了这个问题,但我相信这一切都可以在没有JavaScript的情况下使用
position: sticky;
完成。有几件事值得注意:
overflow
值top: 0;
)希望下面的代码会有所帮助: