Bootstrap закрыть отзывчивое меню " по щелчку мыши"
на" продукты " нажмите я скользить вверх белый div (как показано в приложении). Когда в responsive (mobile и tablet), я хотел бы автоматически закрыть отзывчивую навигационную панель и показывать только белую полосу.
пробовал:
$('.btn-navbar').click();
тоже пробовал:
$('.nav-collapse').toggle();
и это работает. Однако в размере рабочего стола он также называется и делает что-то фанки в меню, где он сжимается на секунду.
какие идеи?
19 ответов:
я получил его для работы с анимацией!
меню в html:
<div id="nav-main" class="nav-collapse collapse"> <ul class="nav"> <li> <a href='#somewhere'>Somewhere</a> </li> </ul> </div>
привязка нажмите событие на все элементы в навигации, чтобы свернуть меню (Bootstrap collapse plugin):
$(function(){ var navMain = $("#nav-main"); navMain.on("click", "a", null, function () { navMain.collapse('hide'); }); });
EDIT Чтобы сделать его более общим, мы можем использовать следующий фрагмент кода
$(function(){ var navMain = $(".navbar-collapse"); // avoid dependency on #id // "a:not([data-toggle])" - to avoid issues caused // when you have dropdown inside navbar navMain.on("click", "a:not([data-toggle])", null, function () { navMain.collapse('hide'); }); });
вам не нужно добавлять дополнительный javascript к тому, что уже включено в опцию коллапса bootstraps. Вместо этого просто включите селекторы data-toggle и data-target в элементы списка меню так же, как вы это делаете с помощью кнопки navbar-toggle. Так что для вашего пункта меню продуктов это будет выглядеть так
<li><a href="#Products" data-toggle="collapse" data-target=".navbar-collapse">Products</a></li>
затем вам нужно будет повторить селекторы data-toggle и data-target для каждого пункта меню
редактировать!!! Для того, чтобы исправить проблемы переполнения и мерцание на этом исправлении я добавляю еще немного кода, который исправит это и все еще не имеет никакого дополнительного javascript. Вот новый код:
<li><a href="#products" class="hidden-xs">Products</a></li> <li><a href="#products" class="visible-xs" data-toggle="collapse" data-target=".navbar-collapse">Products</a></li>
вот он на работе http://jsfiddle.net/jaketaylor/84mqazgq/
это сделает ваши переключатели и целевые селекторы специфичными для размера экрана и устранит сбои в большем меню. Если у кого-то все еще есть проблемы с глюками, пожалуйста, дайте мне знать, и я найду исправление. Спасибо
Я думаю, что вы над всеми инженерными..
$('.navbar-collapse ul li a').click(function(){ $('.navbar-toggle:visible').click(); });
EDIT: чтобы позаботиться о подменю, убедитесь, что их якорь переключения имеет выпадающий класс переключения на нем.
$(function () { $('.navbar-collapse ul li a:not(.dropdown-toggle)').click(function () { $('.navbar-toggle:visible').click(); }); });
правка 2: Добавлена поддержка для телефонов с сенсорным.
$(function () { $('.navbar-collapse ul li a:not(.dropdown-toggle)').bind('click touchstart', function () { $('.navbar-toggle:visible').click(); }); });
мне очень понравилась идея Джейка Тейлора сделать это без дополнительного JavaScript и воспользоваться переключателем коллапса Bootstrap. Я обнаружил, что вы можете исправить проблему "мерцания", когда меню не находится в свернутом режиме, изменив
data-target
селектор слегка включитьin
класса. Так это выглядит так:<li><a href="#Products" data-toggle="collapse" data-target=".navbar-collapse.in">Products</a></li>
Я не тестировал его с вложенными выпадающими меню / меню, так что YMMV.
это работает, но не анимировать.
$('.btn-navbar').addClass('collapsed'); $('.nav-collapse').removeClass('in').css('height', '0');
Я предполагаю, что у вас есть такая строка, определяющая область навигации, основанная на примерах Bootstrap и все
<div class="nav-collapse collapse" >
просто добавьте свойства как таковые, как на кнопке меню
<div class="nav-collapse collapse" data-toggle="collapse" data-target=".nav-collapse">
я добавил к
<body>
Как хорошо, работал. Не могу сказать, что я нашла его, но мне кажется лечить...пока вы не нажмете на случайное место пользовательского интерфейса, чтобы открыть меню, так что не так хорошо, что.DK
просто чтобы быть полным, в Bootstrap 4.0.0-beta с помощью .показать работал для меня...
<li> <a href="#Products" data-toggle="collapse" data-target=".navbar-collapse.show">Products</a> </li>
в HTML я добавил класс nav-link до a - тег для каждой навигационной ссылке.
$('.nav-link').click( function () { $('.navbar-collapse').removeClass('in'); } );
это решение имеет прекрасную работу, на рабочем столе и мобильных устройствах.
<div id="navbar" class="navbar-collapse collapse" data-toggle="collapse" data-target=".navbar-collapse collapse">
просто чтобы изложить решение user1040259, добавьте этот код в свой $(документ).готовые(функция() {});
$('.nav').click( function() { $('.btn-navbar').addClass('collapsed'); $('.nav-collapse').removeClass('in').css('height', '0'); });
как они упоминают, это не оживляет движение... но он закрывает навигационную панель при выборе элемента
для тех, кто использует AngularJS и угловой маршрутизатор UI с этим, вот мое решение (используя переключатель mollwe). Где." шапку-главная-крах" мой "данные-цель".
создать директиву:
module.directive('navbarMainCollapse', ['$rootScope', function ($rootScope) { return { restrict: 'C', link: function (scope, element) { //watch for state/route change (Angular UI Router specific) $rootScope.$on('$stateChangeSuccess', function () { if (!element.hasClass('collapse')) { element.collapse('hide'); } }); } }; }]);
Директива Использовать:
<div class="collapse navbar-collapse navbar-main-collapse"> <your menu>
Я использую функцию mollwe, хотя я добавил 2 улучшения:
A) избегайте закрытия выпадающего списка, если щелкнутая ссылка свернута (включая другие ссылки)
b) скрыть выпадающий список тоже, если вы нажимаете на видимый веб-контент.
jQuery.fn.exists = function() { return this.length > 0; } $(function() { var navMain = $(".navbar-collapse"); navMain.on("click", "a", null, function() { if ($(this).attr("href") !== "#") { navMain.collapse('hide'); } }); $("#content").bind("click", function() { if ($(".navbar-collapse.navbar-ex1-collapse.in").exists()) { navMain.collapse('hide'); } }); });
не самый Новый Поток, но я искал решение для той же проблемы и нашел один (смесь некоторых других).
Я дал NavButton:
<type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> ...
идентификатор / идентификатор типа:
<button id="navcop" type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
не самая лучшая "идея" - но: работает для меня! Теперь вы можете проверить видимость вашей кнопки (с помощью jquery), например:
var target = $('#navcop'); if(target.is(":visible")){ $('#navcop').click(); }
(Примечание: это просто код отрезал ! Я использовал событие "onclick" на своих навигационных ссылках! (Начиная с "Аяксом" Желанию.)
результат: если кнопка " видна "он получил "нажал"... Итак: нет ошибки, если вы используете "полноэкранный вид" Bootstrap (ширина более 940px).
приветы Ральф
PS: он отлично работает с IE9, IE10 и Firefox 25. Не проверил других - но я не вижу проблемы : -)
Это должно сделать трюк.
требуется bootstrap.js.
Пример =>http://getbootstrap.com/javascript/#collapse
$('.nav li a').click(function() { $('#nav-main').collapse('hide'); });
это делает то же самое, что и добавление атрибутов 'data-toggle="collapse"' и 'href="yournavigationID" к тегам меню навигации.
это сработало для меня. Я сделал, как, когда я нажимаю на кнопку Меню, я добавляю или удаляю класс "in", потому что, добавляя или удаляя этот класс, переключатель работает по умолчанию. "e. stopPropagation ()" - это остановить анимацию по умолчанию с помощью bootstrap(я думаю) вы также можете использовать "toggleClass" вместо добавления или удаления класса.
$('#ChangeToggle').on ('click', function (e) {
if ($('.navbar-collapse').hasClass('in')) { $('.navbar-collapse').removeClass('in'); e.stopPropagation(); } else { $('.navbar-collapse').addClass('in'); $('.navbar-collapse').collapse(); } });
вы cau использовать
ul.nav { display: none; }
это будет по умолчанию закрыть панель навигации. Пожалуйста, дайте мне знать, кто-нибудь находит это полезным
если, например, ваш значок переключения виден только для очень маленьких устройств, то вы можете сделать что-то вроде этого:
$('[data-toggle="offcanvas"]').click(function () { $('#side-menu').toggleClass('hidden-xs'); });
щелчок [data-toggle= "offcanvas"] добавит bootstrap.скрытый-xs в мое # боковое меню, которое скроет содержимое бокового меню, но снова станет видимым, если вы увеличите размер окна.
Если меню html
<div id="nav-main" class="nav-collapse collapse"> <ul class="nav"> <li> <a href='#somewhere'>Somewhere</a> </li> </ul> </div>
on nav toggle' in ' класс добавляется и удаляется из переключателя. проверьте, открыто ли отзывчивое меню, а затем выполните переключатель закрыть.
$('.nav-collapse .nav a').on('click', function(){ if ( $( '.nav-collapse' ).hasClass('in') ) { $('.navbar-toggle').click(); } });