Я не уверен на 100%, если это то, что вы искали, вопрос казался немного расплывчатым.Но при условии, что я правильно понял, вы хотите, чтобы ранее застрявший элемент был виден, когда вы покидаете «раздел» и прикрепляете следующий прикрепленный элемент под ним.Чтобы сделать это, я просто отслеживал верхнюю позицию, которой придерживался на протяжении всей итерации цикла, и увеличивал ее для каждого прикрепленного элемента, с которым столкнулся.Код ниже:
function active_menu_item(){
//get all elements that are meant to be sticky
var elements = document.querySelectorAll('.content_item .content_side_left');
elements = [].slice.call(elements);//turn it into an array
for(var element of elements){
//reset all of the elements so we can calculate their natural position in the document
element.style.position = "relative";
}
var top_of_screen = $(window).scrollTop();
var top_position = 0;//track the place to stick the element
for (var i = 0; i < elements.length; i++) {
var element = elements[i];
//get the position relative to viewport
var top_of_element = element.getBoundingClientRect().top;
var divHeight = $(element).height();
//check to see if we are below the next "stick to" position
if (top_of_element <= top_position) {
element.style.position='fixed';
element.style.top = top_position + 'px';
top_position += divHeight;//increment the "stick to" position
}
}
}
jQuery(document).on('scroll', function(){
//$(window).scroll(function() {
active_menu_item();
});
.content_item {
position: relative;
width: 100%;
/* z-index: 1;*/
overflow: hidden;
height:500px;
background:gray;
font-size:30px;
}
.content_side_left {
position: absolute;
top: 50px;
text-align: center;
z-index: 100;
border:1px solid #333;
}
.content_side_left {
width: 118px;
}
<script src="http://code.jquery.com/jquery-1.11.3.min.js"></script>
<div id="message" class="content_item">
<div class="content_side_left" >
sticky content
</div>
</div>
<div id="message" class="content_item">
<div class="content_side_left" >
sticky content
</div>
</div>
<div id="feature" class="content_item">
<div class="content_side_left" >
sticky content
</div>
</div>
<div id="course" class="content_item">
<div class="content_side_left" >
sticky content
</div>
</div>
<div id="education" class="content_item">
<div class="content_side_left" >
sticky content
</div>
</div>
<div id="facility" class="content_item">
<div class="content_side_left" >
sticky content
</div>
</div>
<div id="access" class="content_item">
<div class="content_side_left" >
sticky content
</div>
</div>
<div id="contact" class="content_item">
<div class="content_side_left" >
sticky content
</div>
</div>
Вы должны знать, что выполнение этого на каждом событии прокрутки будет очень плохо для производительности.В идеале вы должны найти более умный способ кэширования позиции и, возможно, задушить события, чтобы не делать так много работы для каждого пикселя, который пользователь прокручивает.Но, надеюсь, это даст вам представление и поможет вам начать работу.