Twitter Bootstrap mobile nav: скрыть меню после нажатия ссылки меню
Я ищу способ заставить Twitter Bootstrap Mobile/tablet nav автоматически скрыть/свернуть после нажатия ссылки меню. У меня много элементов меню, поэтому, когда пользователи расширяют меню в iPhone, они видят только меню, а не страницу внизу. Это смущает пользователя, когда они нажимают ссылку меню, что кажется, что ничего не произошло после клика.
Огромное спасибо и обнимите всех, кто может указать мне в правильном направлении!
Ответы
Ответ 1
Если вы используете BS3.x, вы можете свернуть мобильную навигацию с такой разметкой - обратите внимание на "привязку данных" и "цель данных" в разметке для домашней ссылки:
<nav class="collapse navbar-collapse" role="navigation">
<ul class="nav navbar-nav">
<li class="active">
<a data-toggle="collapse" data-target=".navbar-collapse" href="#home">Home</a>
</li>
<li>
Вы также можете свернуть мобильный Nav через script следующим образом:
<script>
$('.navbar-collapse a').click(function (e) {
$('.navbar-collapse').collapse('toggle');
});
</script>
Этот подход не требует абсолютно никакой дополнительной разметки. Каждый раз, когда ссылка нажимается на nav, она переключает навигационную панель.
Приветствия.
Ответ 2
Навигацию следует закрывать в любое время, когда пользователь щелкает в любом месте тела, а не только элементы навигации. Меню Say открыто, но пользователь нажимает на тело страницы. Пользователь ожидает закрытия меню.
Вы также должны убедиться, что кнопка переключения видна, в противном случае в меню отображается переход.
$(document).ready(function() {
$("body").click(function(event) {
// only do this if navigation is visible, otherwise you see jump in navigation while collapse() is called
if ($(".navbar-collapse").is(":visible") && $(".navbar-toggle").is(":visible") ) {
$('.navbar-collapse').collapse('toggle');
}
});
});
Ответ 3
Самый простой способ, который я нашел, - использовать атрибуты данных на любых навигационных ссылках, где требуется свертывание мобильной навигационной панели. Используйте data-target=".navbar-collapse.in"
, чтобы навигационная панель переключилась только в открытое состояние, и не каждый раз, когда нажимается ссылка.
<a href="#link" data-toggle="collapse" data-target=".navbar-collapse.in">Link</a>
http://codeply.com/go/bp/lbIb5ZaHbq
Ответ 4
Пример разметки, например, Документация по загрузке:
<!-- Collect the nav links, forms, and other content for toggling -->
<div class="collapse navbar-collapse" id="example-auto-collapse">
Закрыть пункт меню нажмите
Добавьте к своему Javascript соответственно:
$('#example-auto-collapse').on('click', 'a:not(.dropdown-toggle)', function(e) {
$('#example-auto-collapse.in').collapse('hide');
}
Альтернатива: Закройте с любым щелчком
Как и Чарли Далссас, рекомендуется было бы также закрыть меню при нажатии на странице. Для этого вы можете заменить Javascript выше следующим:
$('body').click(function(e) {
// don't close when opening a sub-menu in our menu
if(!$(e.target).filter('#example-auto-collapse .dropdown-toggle').length > 0) {
$('#example-auto-collapse.in').collapse('hide');
}
}
Даже чистая imo будет связывать и отвязывать этот обработчик, когда меню открывается/закрывается и не запускает обработчик напрасно при каждом нажатии на пользователя. Это вряд ли может иметь какое-либо заметное влияние.
Я создал учетную запись стека, чтобы ускорить ответ Skelly за его простоту. Затем я узнал, как нельзя пережить без репутации. Затем я узнал, как это решение ломает ScrollSpy. Теперь это решение, которое наилучшим образом подходит для меня без нежелательных побочных эффектов.
Ответ 5
В случае, если кто-либо еще заинтересован, я нашел решение в другом месте. Это красиво просто.
Добавьте этот идентификатор в свою разметку:
<nav class="nav-main nav-collapse collapse" id="hideonclick" role="navigation">
И добавьте это в свой JS:
$('#hideonclick a').click(function (e) {
e.preventDefault();
$(this).tab('show');
if ($('.btn').is(":visible"))
$('.btn').click();
});
Ответ 6
Имейте в виду, что подход для добавления атрибутов переключения данных и атрибутов данных к элементу привязки не работает с настроенным scrollspy. BS ScrollSpy больше не может активировать элемент меню.
Ответ 7
Если вы используете подменю, вам необходимо изменить код @user2562923 следующим образом:
$('.navbar-collapse a').click(function (e) {
if( $(e.target).is('a') && $(e.target).attr('class') != 'dropdown-toggle' ) {
$('.navbar-collapse').collapse('toggle');
}
});