Хранить элемент в контейнере во время прокрутки окна
У меня есть вопрос, который, по моему мнению, будет лучше всего объяснен с помощью изображения, поэтому я собираюсь его прикрепить.
![enter image description here]()
Хорошо, так что в основном у меня есть родительский контейнер и элемент внутри него (он будет фактически блоком текста), который мы будем называть элементом FIXED.
Когда пользователь находится в верхней части страницы, я хочу, чтобы фиксированный элемент находился в верхней части своего родителя. Когда пользователь начинает прокручивать страницу, и родитель начинает перемещать порт представления, я хочу, чтобы фиксированный элемент следовал за прокруткой, пока он не достигнет дна своего родителя, а затем остановится там.
В настоящее время для этого нет HTML-кода или чего-то еще, потому что я нахожусь на стадии предварительного рисования этого сайта.
Я открыт для использования jQuery или javascript в целом, мои навыки JS ограничены, и я знаком с jQuery, но я не против копирования и вставки кода и возиться с ним.
Любая помощь будет принята с благодарностью. Спасибо!
Ответы
Ответ 1
Что вы хотите использовать с помощью javascript (с jQuery или без него), это изменение позиции элемента абсолютно против позиции родителя, родитель должен быть относительным. Вы изменяете позицию в зависимости от положения полосы прокрутки.
В этом руководстве есть хорошее объяснение того, как это сделать.
http://www.wduffy.co.uk/blog/keep-element-in-view-while-scrolling-using-jquery/
Ответ 2
Для некоторых отзывчивых страниц или при изменении размера вашего браузера боковые панели становятся центральным элементом. поэтому вы можете захотеть позаботиться о тормозной точке. Я использовал 786. Кроме того, div сначала не может быть расположен сверху, поэтому вы должны установить смещение по коду.
<script>
$().ready(function() {
var $scrollingDiv = $("#scrollingDiv");
var $div_top = $scrollingDiv.offset().top;
$(window).scroll(function(){
if(window.outerWidth > 786) {
var $scroll_top = $(window).scrollTop();
if($scroll_top > $div_top) {
$pos = $scroll_top - $div_top;
$scrollingDiv
.stop()
.animate({"top": $pos + "px"}, "slow" );
} else if($('#scrollingDiv').offset().top > $div_top) {
$scrollingDiv
.stop()
.animate({"top": "0px"}, "slow" );
}
} else {
$scrollingDiv.css("top", 0); // sidebar became center object
}
});
$(window).resize(function() {
if(window.outerWidth > 786) {
var $scroll_top = $(window).scrollTop();
if($scroll_top > $div_top) {
$pos = $scroll_top - $div_top;
$scrollingDiv
.stop()
.animate({"top": $pos + "px"}, "slow" );
} else if($('#scrollingDiv').offset().top > $div_top) {
$scrollingDiv
.stop()
.animate({"top": "0px"}, "slow" );
}
} else {
$scrollingDiv.css("top", 0); // sidebar became center object
}
});
});
</script>