menex.ru
← Все статьи

Прилипающее меню или шапка для сайта

06.08.2019 • Теги: #html #javascript #jQuery #Oxygen #wordpress

Чтобы блок с меню (или шапка сайта целиком) при прокрутке страницы вниз — скрывался, а потом прилипал сверху сайта, нужно присвоив блоку стиль и задать ему свойствоposition: fixed;.

.menu.fixed {
    position: fixed;
    top: 0px;
}

И прописать, код который при прокрутке на несколько пикселей вниз (в нашем случае на 135px) будет блоку со стилем .menu присваивать стиль .fixed.

<script type="text/javascript">
    jQuery(window).scroll(function() { 
    var the_top = jQuery(document).scrollTop();
    if (the_top > 135) {
        jQuery('.menu').addClass('fixed');
    }
    else {
        jQuery('.menu').removeClass('fixed');
    }
});
</script>

Так можно создавать дополнительный блок со свойством ***display

:

none

;***а при достижении прокрутки до определенного расстояния появляться. Таким образом можно создать разные шапки, основную и дополнительную (минимальную), которая будет прилипать при скролле сайта вниз.

Прилипающее меню для мобильный устройств, которое показывается только при прокрутке вверх

В Oxygen есть настройка для хедера, чтобы он показывался при прокрутке вниз. Но у него нет функции, чтобы на мобильных устройствах при прокрутке вниз он не показывался, а когда мы листаем вверх, то он появлялся. Для это я в настройках хедера в редакторе Oxy выставляю для него skicky всегда, и добавляю в сниппет код JS и CSS. Где при прокрутке вниз добавляется стиль, который скрывается, а при прокрутке вверх он удаляется, соответственно header появляется.

<script>
    // добавляем класс при прокрутке вниз, а вверх он не добовляется
var headerVisible = true;
var scrollPos = jQuery(document).scrollTop();

jQuery(window).scroll(function() {
    var scrollTop = jQuery(document).scrollTop();

    if(headerVisible && scrollTop > scrollPos)
    {
        headerVisible = false;
        jQuery('.oxy-sticky-header').addClass('chm-sticky-header-hidden');
    }
    else if(!headerVisible && scrollTop < scrollPos)
    {
        headerVisible = true;
        jQuery('.oxy-sticky-header').removeClass('chm-sticky-header-hidden');
    }

    scrollPos = scrollTop;
}); 
</script>

<style>
@media only screen and (max-width: 769px) {
        .oxy-sticky-header-active.oxy-sticky-header-fade-in.chm-sticky-header-hidden {
            display:none;
        }
    }
</style>