@lex0rrd

Как сменить цвет элемента навигации при прокрутке страницы через JS?

Здравствуйте.
Как сменить цвет элемента навигации при прокрутке страницы через JS?

Есть панель навигации
637a7a77b6c89697182957.png

Нужно в определенном моменте страницы соответствующий элемент в навигации менял цвет на чёрный, при дальнейшем скролле возвращался исходный цвет, а следующий элемент так же менялся на черный. Соответственно и при скролле, и при нажатии. Все облазил, помогите пожалуйста.

Код навигации в header:

<nav class="header__menu">
                    <ul class="header__list">
                        <li class="header__item0">
                            <a href="#1" class="header__link">Home</a>
                        </li>
                        <li class="header__item1">
                            <a href="#2" class="header__link">About me</a>
                        </li>
                        <li class="header__item2">
                            <a href="#3" class="header__link">Skills</a>
                        </li>
                        <li class="header__item3">
                            <a href="#4" class="header__link">Portfolio</a>
                        </li>
                        <li class="header__item4">
                            <a href="#5" class="header__link">Contacts</a>
                        </li>
                    </ul>
                </nav>


CSS

.header__menu {
    font-size: 18px;
    font-weight: 700;
    position: absolute;
}

.header__list {
    display: flex;
    padding: 0;
    flex-wrap: wrap;
    
}
.header__list li {
    list-style-type: none;
}


.header__link {
    color: #828282;
    line-height: 157%;
    text-decoration: none;
}

.header__link:hover {
    color: #000;
}


JS анимация скролла
$( 'a[href*="#"]' ).on( 'click', function( e ) {
    e.preventDefault();

    $( 'html, body' ).stop().animate( {
        scrollTop: $( $( this ).attr('href') ).offset().top - 80
    }, 700);
} );


И мои попытки решить проблему:

$( window ).on( 'scroll', function () {
    $( 'div[id*=".header__link"]' ).each( function() {
        let $currentItem = $( this );

        if ( $currentItem.offset().top >= scrollY ) {
            $( 'a[href="#' + $currentItem.attr( 'id' ) + '"]').addClass( 'scrolled' )
                .parent().siblings().find('a').removeClass('scrolled');

            return false;
        }
    } );
} );
  • Вопрос задан
  • 195 просмотров
Пригласить эксперта
Ответы на вопрос 1
noder_ss
@noder_ss
Линуксоид-энтузиаст и SQL разработчик
Можете попробовать выучить ScrollMagic.
При адаптиве будет меняться значение скрола, а ScrollMagic работает не по единицам, а когда, собственно доскролят до элема
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы