Можно так (вроде бы, в этот раз ничего не упустил):
const sections = [
{
section: sectionOne,
button: sectionOneButton
},
{
section: sectionTwo,
button: sectionTwoButton
},
// остальные секции
];
window.addEventListener('scroll', () => {
const offsets = sections.map(section => {
const rect = section.section.getBoundingClientRect();
return {
top: rect.top - menuFixedHeight,
bottom: rect.bottom - menuFixedHeight,
};
})
offsets.forEach((offset, key) => {
if (offset.top <= 0 && (key === 0 || offsets[key - 1].bottom <= 0)) {
sections[key].button.classList.add('active');
if (key !== 0) {
sections[key - 1].button.classList.remove('active');
}
}
})
}