Я пытаюсь создать на моем сайте левую колонку, которая становится фиксированной при прокрутке вниз, а затем, когда она соответствует нижнему колонтитулу, она становится абсолютно позиционированной внизу. Когда пользователь прокручивает вверх, он снова становится фиксированным, но пользователь все еще может прокручивать его до верха столбца.
Точное поведение, которое я пытаюсь воспроизвести, можно увидеть здесь: https://store.google.com/gb/collection/accessories_wall ,
Когда пользователь прокручивает страницу, левый столбец имеет фиксированную позицию, но все еще прокручивается вниз. Когда пользователь попадает в нижний колонтитул, поведение меняется, чтобы стать абсолютно позиционированным. Когда пользователь прокручивает вверх, столбец снова фиксируется, но все же позволяет ему прокручиваться к вершине столбца.
Я создал JSFiddle, в котором я до сих пор: https://jsfiddle.net/peLwk1cs/2/ и включен сюда для справки, но если кто-то может помочь заставить его работать как пример Google, я был бы очень признателен.
var lastScrollTop = 0;
$(window).scroll(function() {
var filterCol = $('.filterContainer');
var scrollTopPos = $(window).scrollTop();
//Sticky filter col
if (scrollTopPos > lastScrollTop) {
// downscroll code
if (scrollTopPos >= 60) {
filterCol.addClass("fixed-position");
if($(window).scrollTop() >= $('#resultsCol').offset().top + $('#resultsCol').outerHeight() - window.innerHeight) {
filterCol.removeClass("fixed-position");
filterCol.addClass("absolute-to-bottom");
}
}
else {
// upscroll code
filterCol.removeClass("absolute-to-bottom");
filterCol.removeClass("fixed-position");
}
}
lastScrollTop = scrollTopPos;
});
header {
height: 100px;
background-color:#0000ff;
}
footer {
height: 200px;
background-color:#00ff00;
}
#filtersCol {
position: relative;
}
.filterContainer {
background-color:#ddd;
height: 1200px;
}
.fixed-position {
position: fixed;
top: 0;
overflow: hidden;
min-height: auto;
width: 24vw;
transform: translate3d(0, 0, 0);
margin-top: 110px;
height: 1200px;
}
.absolute-to-bottom {
position: absolute;
bottom: 0;
width: 24vw;;
}
#resultsCol {
height: 3000px;
background-color:#aaa;
}
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<header>HEADER</header>
<div class="container">
<div class="row">
<div id="filtersCol" class="col col-4">
<div class="filterContainer">
FILTER COL FOR FIX/ABSOLUTE
</div>
</div>
<div id="resultsCol" class="col col-8">
RESULTS COL
</div>
</div>
</div>
<footer>FOOTER</footer>