#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 да, на мобильных устройствах могут быть некоторые подводные камни с прокруткой