У меня есть заголовок вверху и 3 столбца внизу. В левой колонке есть меню, в средней колонке текстовый контейнер и еще одна правая колонка.
Когда страница прокручивается вверх, меню поворачивается в фиксированное положение, это работает.
Проблема: при прокрутке страницы каждое меню будет выделено (Scroll Spy), но выделено только последнее меню.
Пожалуйста помоги!
Образец в jsfiddle
JS
$(function () {
$(window).on('scroll', function (event) {
var scrollValue = $(window).scrollTop();
if (scrollValue > 100) {
$('#spy').addClass('affix');
var elemts = $('.scroll-section');
elemts.each(function(index) {
var id = $(this).attr('id');
console.info(id)
var navElem = $('a[href = "#' + id + '"]');
navElem.addClass('active').parent().siblings().children().removeClass( 'active' );
})
}
else{
$('#spy').removeClass('affix');
}
});
});
CSS
.header {
width: 100%;
height: 100px;
background: yellow;
}
.affix {
position: fixed;
top: 0;
}
#spy {
position: fixed;
}
.right-side {
background: gray;
height: 120px;
}
HTML
<body>
<div class = "header">
</div>
<div class = "row">
<div class = "col-sm-3">
<div id = "spy">
<ul class = "nav nav-pills flex-column">
<li class = "nav-item">
<a class = "nav-link" href = "#scroll1">First Section</a> </li>
<li class = "nav-item">
<a class = "nav-link" href = "#scroll2">Second Section</a>
</li>
<li class = "nav-item">
<a class = "nav-link" href = "#scroll3">Third Section</a>
</li>
<li class = "nav-item">
<a class = "nav-link" href = "#scroll4">Fourth Section</a>
</li>
</ul>
</div>
</div>
<div class = "col-sm-7">
<div class = "scroll-section" id = "scroll1">
<h2>First Section</h2>
<p>
During Compile time, the compiler converts the source code into Microsoft Intermediate Language (MSIL). Microsoft Intermediate Language (MSIL) are CPU-Independent set of instructions that can be effectively converted to the native code. Now with the help of JIT compiler, IL code can be executed on any computer architecture supported by the JIT compiler.
</p>
</div>
<div class = "scroll-section" id = "scroll2">
<h2>Second Section</h2>
<p>
During Compile time, the compiler converts the source code into Microsoft Intermediate Language (MSIL). Microsoft Intermediate Language (MSIL) are CPU-Independent set of instructions that can be effectively converted to the native code. Now with the help of JIT compiler, IL code can be executed on any computer architecture supported by the JIT compiler.
</p>
</div>
<div class = "scroll-section" id = "scroll3">
<h2>Third Section</h2>
<p>
During Compile time, the compiler converts the source code into Microsoft Intermediate Language (MSIL). Microsoft Intermediate Language (MSIL) are CPU-Independent set of instructions that can be effectively converted to the native code. Now with the help of JIT compiler, IL code can be executed on any computer architecture supported by the JIT compiler.
</p>
</div>
<div class = "scroll-section" id = "scroll4">
<h2>Fourth Section</h2>
<p>
During Compile time, the compiler converts the source code into Microsoft Intermediate Language (MSIL). Microsoft Intermediate Language (MSIL) are CPU-Independent set of instructions that can be effectively converted to the native code. Now with the help of JIT compiler, IL code can be executed on any computer architecture supported by the JIT compiler.
</p>
<p>
During Compile time, the compiler converts the source code into Microsoft Intermediate Language (MSIL). Microsoft Intermediate Language (MSIL) are CPU-Independent set of instructions that can be effectively converted to the native code. Now with the help of JIT compiler, IL code can be executed on any computer architecture supported by the JIT compiler.
</p>
<p>
During Compile time, the compiler converts the source code into Microsoft Intermediate Language (MSIL). Microsoft Intermediate Language (MSIL) are CPU-Independent set of instructions that can be effectively converted to the native code. Now with the help of JIT compiler, IL code can be executed on any computer architecture supported by the JIT compiler.
</p>
<p>
During Compile time, the compiler converts the source code into Microsoft Intermediate Language (MSIL). Microsoft Intermediate Language (MSIL) are CPU-Independent set of instructions that can be effectively converted to the native code. Now with the help of JIT compiler, IL code can be executed on any computer architecture supported by the JIT compiler.
</p>
</div>
</div>
<div class = "col-sm-2">
<div class = "right-side">
</div>
</div>
</div>
</body>

Вы не проверяете, прошла ли верхняя часть каждого раздела верхнюю часть окна. Добавьте этот оператор if вокруг добавления/удаления активного класса:
if ( scrollValue > $(el).offset().top ){
var id = $(el).attr('id');
var navElem = $('a[href = "#' + id + '"]');
navElem.addClass('active').parent().siblings().children().removeClass( 'active' );
}
$(function () {
$(window).on('scroll', function (event) {
var scrollValue = $(window).scrollTop();
if (scrollValue > 100) {
$('#spy').addClass('affix');
var els = $('.scroll-section');
els.each(function(index, el) {
if ( scrollValue > $(el).offset().top ){
var id = $(el).attr('id');
var navElem = $('a[href = "#' + id + '"]');
navElem.addClass('active').parent().siblings().children().removeClass( 'active' );
}
});
} else {
$('#spy').removeClass('affix');
}
});
});.header {
width: 100%;
height: 100px;
background: yellow;
}
.affix {
position: fixed;
top: 0;
}
#spy {
position: fixed;
}
.right-side {
background: gray;
height: 120px;
}<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link rel = "stylesheet" href = "https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">
<script src = "https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/js/bootstrap.min.js"></script>
<body>
<div class = "header">
</div>
<div class = "row">
<div class = "col-sm-3">
<div id = "spy">
<ul class = "nav nav-pills flex-column">
<li class = "nav-item">
<a class = "nav-link" href = "#scroll1">First Section</a> </li>
<li class = "nav-item">
<a class = "nav-link" href = "#scroll2">Second Section</a>
</li>
<li class = "nav-item">
<a class = "nav-link" href = "#scroll3">Third Section</a>
</li>
<li class = "nav-item">
<a class = "nav-link" href = "#scroll4">Fourth Section</a>
</li>
</ul>
</div>
</div>
<div class = "col-sm-7">
<div class = "scroll-section" id = "scroll1">
<h2>First Section</h2>
<p>
During Compile time, the compiler converts the source code into Microsoft Intermediate Language (MSIL). Microsoft Intermediate Language (MSIL) are CPU-Independent set of instructions that can be effectively converted to the native code. Now with the help of JIT compiler, IL code can be executed on any computer architecture supported by the JIT compiler.
</p>
</div>
<div class = "scroll-section" id = "scroll2">
<h2>Second Section</h2>
<p>
During Compile time, the compiler converts the source code into Microsoft Intermediate Language (MSIL). Microsoft Intermediate Language (MSIL) are CPU-Independent set of instructions that can be effectively converted to the native code. Now with the help of JIT compiler, IL code can be executed on any computer architecture supported by the JIT compiler.
</p>
</div>
<div class = "scroll-section" id = "scroll3">
<h2>Third Section</h2>
<p>
During Compile time, the compiler converts the source code into Microsoft Intermediate Language (MSIL). Microsoft Intermediate Language (MSIL) are CPU-Independent set of instructions that can be effectively converted to the native code. Now with the help of JIT compiler, IL code can be executed on any computer architecture supported by the JIT compiler.
</p>
</div>
<div class = "scroll-section" id = "scroll4">
<h2>Fourth Section</h2>
<p>
During Compile time, the compiler converts the source code into Microsoft Intermediate Language (MSIL). Microsoft Intermediate Language (MSIL) are CPU-Independent set of instructions that can be effectively converted to the native code. Now with the help of JIT compiler, IL code can be executed on any computer architecture supported by the JIT compiler.
</p>
<p>
During Compile time, the compiler converts the source code into Microsoft Intermediate Language (MSIL). Microsoft Intermediate Language (MSIL) are CPU-Independent set of instructions that can be effectively converted to the native code. Now with the help of JIT compiler, IL code can be executed on any computer architecture supported by the JIT compiler.
</p>
<p>
During Compile time, the compiler converts the source code into Microsoft Intermediate Language (MSIL). Microsoft Intermediate Language (MSIL) are CPU-Independent set of instructions that can be effectively converted to the native code. Now with the help of JIT compiler, IL code can be executed on any computer architecture supported by the JIT compiler.
</p>
<p>
During Compile time, the compiler converts the source code into Microsoft Intermediate Language (MSIL). Microsoft Intermediate Language (MSIL) are CPU-Independent set of instructions that can be effectively converted to the native code. Now with the help of JIT compiler, IL code can be executed on any computer architecture supported by the JIT compiler.
</p>
</div>
</div>
<div class = "col-sm-2">
<div class = "right-side">
</div>
</div>
</div>
</body>