부트 스트랩 닫기 반응 형 메뉴 "클릭시"


86

"PRODUCTS"에서 흰색 div를 위로 슬라이드합니다 (첨부 참조). 반응 형 (모바일 및 태블릿) 상태에서 반응 형 탐색 메뉴를 자동으로 닫고 흰색 막대 만 표시하고 싶습니다.

나는 시도했다 :

$('.btn-navbar').click();  

또한 시도 :

$('.nav-collapse').toggle();

그리고 그것은 작동합니다. 그러나 데스크톱 크기에서는 메뉴가 1 초 동안 축소되는 펑키 한 작업을 수행하기도합니다.

어떤 아이디어?

여기에 이미지 설명 입력


HTML을 게시 할 수 있습니까? 또한 숨기기 기능을 위해 부트 스트랩을 사용하고 있습니까? 아니면 자신 만의 것을 구현하려고합니까?
Kris Hollenbeck

난 그냥 간단한 일을하려고하는 것 같아요. 난 그냥 "제품"을 클릭하면 네비게이션 바에을 닫으려면
user1040259

여기에서 이러한 모든 솔루션을 직접 시도하고 비교하고 싶지 않다면 이 답변에서 # 1을 편집 하십시오 .
caw

여기에서 약간 스크롤을 권장하고 @LukeTillman의 대답을 봅니다. jQuery없이 완벽하게 작동합니다. :)
DAS의 KEK

답변:


102

애니메이션 작업이 가능합니다!

HTML 메뉴 :

<div id="nav-main" class="nav-collapse collapse">
     <ul class="nav">
         <li>
             <a href='#somewhere'>Somewhere</a>
         </li>
     </ul>
 </div>

탐색의 모든 요소에 대한 클릭 이벤트를 축소 메뉴에 바인딩 (부트 스트랩 축소 플러그인) :

 $(function(){ 
     var navMain = $("#nav-main");
     navMain.on("click", "a", null, function () {
         navMain.collapse('hide');
     });
 });

편집 좀 더 일반적으로 만들기 위해 다음 코드 스 니펫을 사용할 수 있습니다.

 $(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');
     });
 });

3
모든 경우 a요소 : 당신은 단지 필요가 호출하는 것입니다$("#nav-main").collapse('hide');
ANKIT 자이나교

@mollwe 드롭 다운 메뉴가있을 때 해결책이 있습니까? jsfiddle을 만들어 보았지만 메뉴도 열리지 않습니다. jsfiddle.net/Y3H92
clankill3r 2014-08-04

@ clankill3r bootstrap.js에 대한 참조가 누락되어 메뉴가 작동하지 않는 것 같습니다. jsfiddle 업데이트 : jsfiddle.net/Y3H92/1
mollwe 2014-08-12

바이올린으로 @mollwe 메뉴가 전혀 닫히지 않습니다.
clankill3r 2014-08-13

1
@ clankill3r @ 늦은 응답에 대해 죄송합니다! 그러나 결코 늦지 않는 것보다 낫습니다. jsfiddle.net/mollwe/Y3H92/5
mollwe 2014

136

부트 스트랩 축소 옵션에 이미 포함 된 항목에 추가 자바 스크립트를 추가 할 필요가 없습니다. 대신 navbar-toggle 버튼과 마찬가지로 메뉴 목록 항목에 데이터 토글 및 데이터 대상 선택기를 포함하십시오. 따라서 제품 메뉴 항목의 경우 다음과 같습니다.

<li><a href="#Products" data-toggle="collapse" data-target=".navbar-collapse">Products</a></li>

그런 다음 각 메뉴 항목에 대해 데이터 토글 및 데이터 대상 선택기를 반복해야합니다.

편집하다!!! 오버플로 문제를 해결하고이 수정에서 깜박임을 수정하기 위해이 문제를 해결하고 여전히 추가 자바 스크립트가없는 코드를 더 추가합니다. 다음은 새로운 코드입니다.

<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/

이렇게하면 토글 및 대상 선택기가 화면 크기에 맞게 만들어지고 더 큰 메뉴에서 결함이 제거됩니다. 여전히 결함이있는 사람이있는 경우 알려 주시면 해결 방법을 찾도록하겠습니다. 감사

편집 : 부트 스트랩 v4.1.3에서는 표시 / 숨겨진 클래스를 사용할 수 없습니다. 대신에 hidden-xs사용 d-none d-sm-block하고 대신에 visible-xs사용 d-block d-sm-none.


14
내비게이션이 "반응 형"메뉴로 표시되지 않을 때 깜박 거리고 이상한 현상이 발생합니다.
Florian

5
이것은 올바른 구현입니다. 사용자 정의 jQuery가 필요하지 않습니다.
larrylampco 2014 년

나는이 답변과 이전 댓글에 대한 내 반대 투표를 제거했습니다 (또한 비디오가 더 이상 작동하지 않았기 때문에). 깜박임에 대한 내 의견이 원래 답변에 여전히 유효하기 때문에 몇 개의 찬성 투표를 받았으며 "편집"이 명확하게 표시되어 있으므로 제거하고 기록을 다시 작성할 이유가 없습니다. 그것은 당시에 유효했고 당신은 그에 따라 반응했습니다. 답변을 읽는 사람들은 ... "편집"을 참조하고 당신이 그것을 개선 알
플로리안

완벽하게 문서화 된 자바 스크립트 한 줄을 피하기 위해 모든 링크를 복제하는 것을 선호하십니까? getbootstrap.com/javascript/#collapse-methods .
Sander Garretsen

1
대신 추가하는 data-toggledata-target모든 리튬 요소에 속성을 대신 부모에 추가 할 수 있습니다 ul또는 div태그입니다.
Jeremy Quick

40

당신은 공학을 다한 것 같아요 ..

    $('.navbar-collapse ul li a').click(function(){ 
            $('.navbar-toggle:visible').click();
    });

편집 : 하위 메뉴를 관리하려면 토글 앵커에 드롭 다운 토글 클래스가 있는지 확인하십시오.

    $(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();
            });
    });

3
받아 들여진 대답이어야합니다. 나머지 과도하게 설계되었으며 반응이없는 디스플레이에서 깜박입니다.
rybo111

3
이것은 받아 들여지는 대답 일 수 있지만 하위 메뉴를 고려하지 않고 실제로 그들을 깨뜨립니다. 다른 "과도하게 엔지니어링 된"솔루션 중 일부는 단점에도 불구하고이를 고려했습니다. 다음 추가가이를 처리합니다. $ (function () {$ ( '. navbar-collapse ul li a : not (.dropdown-toggle)'). click (function () {$ ( '. navbar-toggle : visible '). click ();});});
Ed Bishop

당신의 편집에 대한 고맙습니다!
Hontoni 2014-06-29

1
나는 터치 스타트가 약간, 클릭이 잘 작동한다고 생각합니다. 버튼에서 "시작"할 때 슬라이딩에 어떻게 반응합니까?
Hontoni 2014-06-29

37

추가 JavaScript없이 부트 스트랩의 축소 토글을 활용하는 Jake Taylor의 아이디어가 정말 마음에 들었습니다. 클래스 data-target를 포함하도록 선택기를 약간 수정하여 메뉴가 축소 모드에 있지 않을 때 나타나는 "깜박임"문제를 해결할 수 있습니다 in. 따라서 다음과 같이 보입니다.

<li><a href="#Products" data-toggle="collapse" data-target=".navbar-collapse.in">Products</a></li>

중첩 된 드롭 다운 / 메뉴로 테스트하지 않았으므로 YMMV.


3
이것은 나에게도 최고의 구현이었습니다.
huijing

어떤 이유로 내 ScrollSpy 가이 방법으로 중단되지만 Jake Taylor의 방법으로 잘 작동합니다.
Inkling 2015

지금까지 가장 좋고 간단한 대답입니다.
Diaa

잠시 동안 작동하기 위해 깜박임이 아닌 축소를 시도했지만 이것이 가장 간단하고 우아한 솔루션입니다. 감사합니다!
McVenco

9

완료하기 위해 Bootstrap 4.0.0-beta에서 .show를 사용하는 것이 저에게 효과적 이었습니다 ...

<li>
  <a href="#Products" data-toggle="collapse" data-target=".navbar-collapse.show">Products</a>
</li>

저에게 가장 좋은 대답입니다. 감사합니다.
MoxxiManagarm

5

Bootstrap 예제와 모든 것을 기반으로 탐색 영역을 정의하는 이와 같은 줄이 있다고 가정합니다.

<div class="nav-collapse collapse" >

MENU 버튼과 같이 속성을 추가하기 만하면됩니다.

<div class="nav-collapse collapse" data-toggle="collapse"  data-target=".nav-collapse">

나는 또한 추가하고 <body>일했습니다. 내가 프로파일 링했다고 말할 수는 없지만 메뉴를 열기 위해 UI의 임의의 지점을 클릭하기 전까지는 나에게 대접처럼 보입니다. 그렇게 좋지는 않습니다.

DK


Bootstrap의 내장 기능에 의존하는 적절한 솔루션 추가 jQuery 또는 javascript가 없습니다. 그리고 가장 간단한 해결책입니다. 이것은 받아 들여진 대답이어야합니다.
Sergi Papaseit

4

이것은 작동하지만 애니메이션이 적용되지는 않습니다.

$('.btn-navbar').addClass('collapsed');
$('.nav-collapse').removeClass('in').css('height', '0');

8
클릭시 닫기가 더 나은 기본값이므로 이에 대한 구성 옵션이 없다는 것은 약간 놀랍습니다.
bchesley 2013 년

3

HTML에서 나는의 클래스 추가 탐색 링크를 받는 각 탐색 링크의 태그입니다.

$('.nav-link').click(
    function () {
        $('.navbar-collapse').removeClass('in');
    }
);

3

이 솔루션은 데스크톱 및 모바일에서 잘 작동합니다.

<div id="navbar" class="navbar-collapse collapse" data-toggle="collapse"  data-target=".navbar-collapse collapse">

navbar-id를 데이터 대상으로 사용할 때 나를 위해 일했습니다 : <div id = "navbar"class = "collapse navbar-collapse"data-toggle = "collapse"data-target = "# navbar">하지만 못생긴 애니메이션을 제공합니다 데스크톱 크기에서
wutzebaer

매우 못 생기고보기 힘들다!
candlejack

2

user1040259의 솔루션을 설명하기 위해이 코드를 $ (document) .ready (function () {});

    $('.nav').click( function() {
        $('.btn-navbar').addClass('collapsed');
        $('.nav-collapse').removeClass('in').css('height', '0');
    });

그들이 언급했듯이 이것은 이동을 애니메이션하지 않지만 항목 선택시 탐색 모음을 닫습니다.


2

AngularJS 및 Angular UI Router를 사용하는 사람들을 위해 여기에 내 솔루션이 있습니다 (mollwe의 토글 사용). 여기서 ".navbar-main-collapse"는 내 "데이터 대상"입니다.

지시문 생성 :

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>

attr 클래스에 지시문을 넣은 것 같습니다. 맞습니까?
링고 유쾌한

링크 기능 내에서 다음이 작동합니다. element.on ( 'click', function () {scope.vm.isCollapsed =! scope.vm.isCollapsed;});
JimmyBob

2

이것은 트릭을 할 것입니다.

bootstrap.js가 필요합니다.

예 => http://getbootstrap.com/javascript/#collapse

    $('.nav li a').click(function() {
      $('#nav-main').collapse('hide');
    });

이것은 탐색 메뉴 태그에 'data-toggle = "collapse"'및 'href = "yournavigationID"'속성을 추가하는 것과 동일합니다.


좀 더 자세히 설명해 주시겠습니까?
Blunderfest 2015 년

그게 jQuery 아닌가요? 일반적으로 jQuery와 Angular를 모두 사용하는 것이 좋지 않습니까?
AlxVallejo

1

두 가지 개선 사항을 추가했지만 mollwe 기능을 사용하고 있습니다.

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');
                    }
                });

            });

1

최신 스레드는 아니지만 동일한 문제에 대한 해결책을 찾고 하나 (다른 것의 혼합)를 찾았습니다.

NavButton을주었습니다.

<type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> ...

다음과 같은 ID / 식별자 :

 <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();
   }

(참고 : 이것은 코드 일뿐입니다! 내 Nav 링크에서 "onclick"이벤트를 사용했습니다! (AJAX Reguest 시작)

결과는 다음과 같습니다. 버튼이 "보이는"경우 "클릭"되었습니다. 따라서 : 부트 스트랩의 "전체 화면보기"(너비 940px 이상)를 사용하는 경우 버그가 없습니다.

인사말 Ralph

추신 : IE9, IE10 및 Firefox 25에서 잘 작동합니다. 다른 사람을 확인하지 않았습니다.하지만 문제를 볼 수 없습니다. :-)


1

이것은 나를 위해 일했습니다. 나는 메뉴 버튼을 클릭했을 때 클래스 'in'을 추가하거나 제거했습니다. 그 클래스를 추가하거나 제거하면 토글이 기본적으로 작동하기 때문입니다. 'e.stopPropagation ()'은 부트 스트랩으로 기본 애니메이션을 중지하는 것입니다 (아마도). 클래스 추가 또는 제거 대신 '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();
        }

    });

0

당신은 사용합니다

ul.nav {
    display: none;
}

이것은 기본적으로 navbar를 닫습니다. 누구든지 유용하다고 생각하면 알려주세요


2
문제는 반응 형 메뉴가 아니라 "일반적으로"표시 될 때 탐색을 숨긴다는 것입니다.
Florian

0

예를 들어 전환 가능 아이콘이 매우 작은 장치에만 표시되는 경우 다음과 같이 할 수 있습니다.

$('[data-toggle="offcanvas"]').click(function () {
    $('#side-menu').toggleClass('hidden-xs');
});

[data-toggle = "offcanvas"]를 클릭하면 부트 스트랩의 .hidden-xs가 내 # side-menu에 추가되어 사이드 메뉴 콘텐츠가 숨겨 지지만 창 크기를 늘리면 다시 표시됩니다.


0

메뉴 HTML이

<div id="nav-main" class="nav-collapse collapse">
     <ul class="nav">
         <li>
             <a href='#somewhere'>Somewhere</a>
         </li>
     </ul>
</div>

탐색 토글 'in'클래스가 추가되고 토글에서 제거됩니다. 반응 형 메뉴가 열려 있는지 확인한 다음 닫기 토글을 수행합니다.

$('.nav-collapse .nav a').on('click', function(){
    if ( $( '.nav-collapse' ).hasClass('in') ) {
        $('.navbar-toggle').click();
    }
});

0

콘솔 오류없이 Tuggle Nav Close, IE 브라우저 호환 답변. 부트 스트랩을 사용하는 경우 다음을 사용하십시오.

$('.nav li a').on('click', function () {
    if ($("#navbar").hasClass("in")) {
        $('.navbar-collapse.in').show();
    }
    else {
        $('.navbar-collapse.in').hide();
    }
})

-1
$('.navbar-toggle').trigger('click');

왜 이것이 정답이 아닌지 이해할 수 없습니까? 클릭 이벤트에서 메뉴 링크를 클릭 할 때마다 메뉴를 열거 나 닫는 기본 동작을 변경하지 않기 때문에 올바른 방법이라고 생각하는 메뉴를 전환 할 수 있습니다.
Aqib

-1

자바 스크립트가없는 부트 스트랩 4 솔루션

data-toggle="collapse" data-target="#navbarSupportedContent.show" div에 속성 추가<div class="collapse navbar-collapse">

올바른 정보를 제공했는지 확인하십시오 id.data-target

<div className="collapse navbar-collapse" id="navbarSupportedContent" data-toggle="collapse" data-target="#navbarSupportedContent.show">

.show 큰 해상도에서 메뉴 깜박임을 방지하는 것입니다.

<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
<nav class="navbar navbar-expand-lg navbar-light bg-light">
  <a class="navbar-brand" href="#">Navbar</a>
  <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
    <span class="navbar-toggler-icon"></span>
  </button>

  <div class="collapse navbar-collapse" id="navbarSupportedContent" data-toggle="collapse" data-target="#navbarSupportedContent.show">
    <ul class="navbar-nav mr-auto">
      <li class="nav-item active">
        <a class="nav-link" href="#">Home <span class="sr-only">(current)</span></a>
      </li>
      <li class="nav-item">
        <a class="nav-link" href="#">Link</a>
      </li>
      <li class="nav-item dropdown">
        <a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
          Dropdown
        </a>
        <div class="dropdown-menu" aria-labelledby="navbarDropdown">
          <a class="dropdown-item" href="#">Action</a>
          <a class="dropdown-item" href="#">Another action</a>
          <div class="dropdown-divider"></div>
          <a class="dropdown-item" href="#">Something else here</a>
        </div>
      </li>
      <li class="nav-item">
        <a class="nav-link disabled" href="#">Disabled</a>
      </li>
    </ul>
    <form class="form-inline my-2 my-lg-0">
      <input class="form-control mr-sm-2" type="search" placeholder="Search" aria-label="Search">
      <button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button>
    </form>
  </div>
</nav>

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.