Переключение выполнения скрипта при нажатии на кнопку

#javascript #jquery

#javascript #jquery

Вопрос:

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

Как я могу этого добиться? Вот код для скрытия / отображения навигации:

 var didScroll;
var lastScrollTop = 0;
var delta = 5;
var navbarHeight = $('.pageheader').outerHeight();

$(window).scroll(function(event){
    didScroll = true;
});

setInterval(function() {
    if (didScroll) {
        hasScrolled();
        didScroll = false;
    }
}, 250);

function hasScrolled() {
    var st = $(this).scrollTop();

    if(Math.abs(lastScrollTop - st) <= delta)
        return;
    if (st > lastScrollTop amp;amp; st > navbarHeight){
        // Scroll Down
        $('.pageheader').removeClass('nav-down').addClass('nav-up');
    } else {
        // Scroll Up
        if(st   $(window).height() < $(document).height()) {
            $('.pageheader').removeClass('nav-up').addClass('nav-down');
        }
    }
    
    lastScrollTop = st;
}  

Ответ №1:

Может быть несколько решений в зависимости от того, чего вы действительно пытаетесь достичь:

Решение 1

Сохраните состояние кнопки гамбургера, открыта она или закрыта, в переменной и просто выйдите из своей hasScrolled функции:

 var isMenuOpen = false;

// then toggle the value of isMenuOpen whenever clicking the hamburger button

function hasScrolled() {
    // do nothing and exit if the menu is open
    if (isMenuOpen) {
        return;
    }

    // the rest of the function
}
  

Решение 2

Вы также можете переключать прокрутку на своей странице с помощью следующего CSS (при условии, что просматриваемый вами прокручиваемый контент document.body ):

 hamburgerMenuClickListener() {
    // based on the logic of your menu you might need to customize this line
    document.body.classList.toggle("noScroll");

    // other logic of your code
}
  
 body.noScroll {
    overflow: hidden;
}
  

Комментарии:

1. есть 2 наивных решения из головы, не зная деталей логики вашего приложения, что повлияет на то, какое решение будет соответствовать вашим потребностям

2. Спасибо! Я предпочитаю решение 2, потому что оно очень простое. Но, я думаю, у меня возникнет проблема на устройствах IOS. Но я проверю это.

3. @JPC да, на мобильных устройствах могут быть некоторые подводные камни с прокруткой