Задать вопрос

Как сделать что бы меню в bootstrap в мобильной версии закрывалось при клике на пункте из меню?

Одностраничный сайт на Bootstrap. Есть стандартное меню. Фиксированное и не прокручивающееся. Ссылки видут на якори на этой же странице.
<div class="navbar navbar-default navbar-fixed-top" role="navigation">
	<div class="container container-fluid">
	<!-- Brand and toggle get grouped for better mobile display -->
	<div class="navbar-header">
		<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar-collapse">
		<span class="sr-only">Меню</span>
		<span class="icon-bar"></span>
		<span class="icon-bar"></span>
		<span class="icon-bar"></span>
		</button>
	<a class="navbar-brand" href="#">ЛОГО</a>		
	
	</div>
	<!-- Collect the nav links, forms, and other content for toggling -->
	<div class="collapse navbar-collapse" id="navbar-collapse">
	<ul class="nav navbar-nav">
	</ul>
	<ul class="nav navbar-nav navbar-right">
	<li><a href="#punkt1">punkt1</a></li>
	<li><a href="#punkt2">punkt2</a></li>
	<li><a href="#punkt3">punkt3</a></li>
	</ul>
	</div><!-- /.navbar-collapse -->
	</div><!-- /.container-fluid -->
</div>


В мобильной версии имеет следующие поведение:
Нажимаем на «сендвич» меню.
Открывается меню.
Нажимаем на любую ссылку.
Страница прокручивается до якоря.
НО меню не закрывается =((((

P.S.: так же скажу спасибо, если подскажете следующие:
в css задано
body {
padding-top: 50px;
}

Что бы вверх сайта не оказался под меню. Но когда мы переходим по якорю, то якорь получается под меню. Как это поправить?
  • Вопрос задан
  • 23759 просмотров
Подписаться 4 Оценить 1 комментарий
Решения вопроса 1
Lalikin
@Lalikin
айтишник с фотокамерой
По нажатию на "сендвич" у блока с меню начинается анимация, а после нее добавляется класс in. Чтобы по нажатию спрятать меню, достаточно забрать класс, дальнейшая работа с меню будет корректной.
$('#navbar-collapse').removeClass('in');
Касательно padding-top: 50px;
Либо создаем якорь выше, чтобы он прятался под меню, а нужное нам было на 50px ниже. Либо через js
<a href="#anchor" class="toAnchor">ссылка для перехода</a>
.........
<a id="anchor">якорь</a>

$('.toAnchor').on('click', function () {
  $a = $($(this).attr('href'));
  $('html,body').animate({ scrollTop: $a.offset().top - 50}, 500);
  return false;
});
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
Александр! Большое человеческое спасибо! Удалось решить обе проблемы. Правда, я как ламер, сначала подумал, что нужно просто вставить код и всё будет работать ) Оказалось, что нужно всё-таки понимать, что делаешь ) В первом случае удаление класса нужно делать именно по нажатию на пункт меню, а фрагмент кода не содержит обработки нажатия ) А во втором случае - опечатка: вместо точки '.' в коде стоит шарп '#'. Дополнив и исправив, получил работающий код, решающий сразу обе проблемы. Ещё раз большое спасибо!
<script> 
        $('.toAnchor').on('click', function () {
           $('.navbar-collapse').removeClass('in');
           $a = $($(this).attr('href'));
           $('html,body').animate({ scrollTop: $a.offset().top - 50}, 500);
         return false;
         });
   </script>
Ответ написан
@ralduga
Мне помогло это:

$(function(){ 
     var navMain = $(".navbar-collapse"); 
     navMain.on("click", "a:not([data-toggle])", null, function () {
         navMain.collapse('hide');
     });
 });
Ответ написан
@stanislav_slav
этот код сделает скрытие панели медленным (анимированным):
$('.navbar-collapse').on('click', function () {
    $('.navbar-collapse').collapse('hide');
    $a = $($(this).attr('href'));
    $('html,body').animate({ scrollTop: $a.offset().top - 50}, 500);
    return false;
});
Ответ написан
EXIDMen
@EXIDMen
Разработка Веб Сайтов
Для Bootstrap 4.3.1 - Рабочий вариант.
При клике на ссылку закрывает меню и убирает тёмный фон.

$('.nav-link').on('click', function () {
	$('.navbar').removeClass('open');
	$('.bg-overlay').removeClass('open1');
	$a = $($(this).attr('href'));
	$('html,body').animate({ scrollTop: $a.offset().top - 50}, 500);
	return false;
});
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы