Как отменить действие класса navbar-fixed-top на мобильном разрешении?

#navbarlol {
    z-index: 9999;
    position: fixed;
    width: 100%;
    display: block;
    -webkit-transition: all 0.3s;
    -o-transition: all 0.3s;
    transition: all 0.3s;
}

#navbarlol a {
    display: block;
}


var prevScrollpos = window.pageYOffset;
window.onscroll = function() {
    var currentScrollPos = window.pageYOffset;

    if (prevScrollpos > currentScrollPos) {
        document.getElementById("navbarlol").style.top = "0px";
    } else {
        document.getElementById("navbarlol").style.top = "-45px";
    }

    prevScrollpos = currentScrollPos;
}

и ещё может подскажите по скрипту после перезагрузки когда начинаешь скролить резко скачок в верх на 45 пикселей, а как сделать скачок в плавное действие?


Ответы (2 шт):

Автор решения: Alex Sazonov

Есть метод такой

domElement.scrollBy({
 top: 0, // сколл по вертикали
 left: offset, // сколл по горизонтали
 behavior: 'smooth' // это говорит о том, что надо скролить плавно
});

Попробуй. Может оно? А про первый вопрос не очень понятно. Вроде это медиазапросами решается.

→ Ссылка
Автор решения: Август

ответ дан отталкиваясь от дискуссии в комментариях:

поведение класса navbar-fixed-top

всё, что касается стилей (как будет вести себя класс, учитывая размер экрана) - решаться должно в стилях с помощью медиа запросов. то есть, не обязательно удалять класс navbar-fixed-top, если размер устройства меньше 991px.

если с медиа запросами проблемы, то удаляйте класс navbar-fixed-top при загрузке страницы. например, так:

document.addEventListener('load', () => {
    if (window.innerWidth < 991) {
        document.querySelector('navbar').classList.remove('navbar-fixed-top');
    }
});

но учтите, что при изменении ширины экрана, класс сам не вернется, по-этому нужно это учесть и добавить событие resize.

так же обратите внимание, что Ваше событие window.onscroll будет работать всегда, а для десктопной версии Вам это не нужно. при загрузке страницы нужно (!) учесть этот момент. например:

document.addEventListener('load', () => {
    if (window.innerWidth < 991) {
        window.onscroll = function() {
            .... //Ваш код по скрытию/появлению блока navbar

как сделать плавное скрытие/появление #navbarlol

добавить блоку #navbarlol стиль transition: top 1s;

несколько замечаний

учтите, что если Вы навешиваете обработчики событий как свойство (window.onscroll и т.д), то таким образом Вы можете вешать только по одному виду событий на элемент. например, следующий window.onscroll перепишет предыдущий window.onscroll. используйте как альтернативу addEventListener.

→ Ссылка