Если кратко - для каждой секции меню определяем идентификатор, по нему при скроле собираем все секции и сравниваем текущее положение на странице с положением на странице каждой секции. Если секция подходит - скролим меню к нужному элементу, ставим классы и пр., можно на основе того же идентификатора. Можно вручную - такое вычислять положение кнопки в родительском элементе, можно слайдерами, например, swiper может центрировать активный слайд, там уже вариантов масса