最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Bootstrap navbar toggle use to add class - Stack Overflow

programmeradmin1浏览0评论

I use Bootstrap V3 in Wordpress.

What I want to achieve is that when someone clicks the button in the collapsed navbar menu, the div with the class .slider gets a extra class.

This is the HTML from the navbar:

<nav class="navbar navbar-default navbar-static-top">
  <div class="container">
    <div class="navbar-header">
      <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar">
        <span class="sr-only">Toggle navigation</span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
      </button>
    </div>
    <div class="collapse navbar-collapse" id="navbar">
      <?php
        wp_nav_menu( array(
            'theme_location'    => 'navbar-right',
            'depth'             => 2,
            'menu_class'        => 'nav navbar-nav navbar-right',
            'fallback_cb'       => 'wp_bootstrap_navwalker::fallback',
            'walker'            => new wp_bootstrap_navwalker())
        );
    ?>
    </div><!-- /.navbar-collapse -->
  </div><!-- /.container -->
</nav>

And this is the HTML from the div where I want to add a extra class:

<div class="slider">
  <div class="container">
    <div class="row">
      other elements 
    </div> <!-- close row -->
  </div> <!-- close container -->
</div> <!-- close slider -->

I've tried this with CSS:

.navbar-default .navbar-collapse .in ~ .slider{
   margin-top: -246px;
   padding-top: 176px;
}

And this with jQuery:

$(function() {                       
  $("#navbar").click(function() {  
    $(".slider").addClass("sliderMove");      
  });
});

The extra class that should be added on slider is:

.sliderMove{
  margin-top: -246px;
  padding-top: 176px;
}

The purpose of this is that the slider that is after/under the navbar stay's under the navbar when it collapsed.

I use Bootstrap V3 in Wordpress.

What I want to achieve is that when someone clicks the button in the collapsed navbar menu, the div with the class .slider gets a extra class.

This is the HTML from the navbar:

<nav class="navbar navbar-default navbar-static-top">
  <div class="container">
    <div class="navbar-header">
      <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar">
        <span class="sr-only">Toggle navigation</span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
      </button>
    </div>
    <div class="collapse navbar-collapse" id="navbar">
      <?php
        wp_nav_menu( array(
            'theme_location'    => 'navbar-right',
            'depth'             => 2,
            'menu_class'        => 'nav navbar-nav navbar-right',
            'fallback_cb'       => 'wp_bootstrap_navwalker::fallback',
            'walker'            => new wp_bootstrap_navwalker())
        );
    ?>
    </div><!-- /.navbar-collapse -->
  </div><!-- /.container -->
</nav>

And this is the HTML from the div where I want to add a extra class:

<div class="slider">
  <div class="container">
    <div class="row">
      other elements 
    </div> <!-- close row -->
  </div> <!-- close container -->
</div> <!-- close slider -->

I've tried this with CSS:

.navbar-default .navbar-collapse .in ~ .slider{
   margin-top: -246px;
   padding-top: 176px;
}

And this with jQuery:

$(function() {                       
  $("#navbar").click(function() {  
    $(".slider").addClass("sliderMove");      
  });
});

The extra class that should be added on slider is:

.sliderMove{
  margin-top: -246px;
  padding-top: 176px;
}

The purpose of this is that the slider that is after/under the navbar stay's under the navbar when it collapsed.

Share Improve this question edited Jun 17, 2016 at 11:39 dippas 60.6k15 gold badges123 silver badges132 bronze badges asked Jun 17, 2016 at 10:58 TimoTimo 274 silver badges11 bronze badges 0
Add a ment  | 

5 Answers 5

Reset to default 3

You just need to hook into the Bootstrap collapse event of your collapsible navbar. There is no need to assign an extra click handler to the collapse nav button.

Collapse Events

Bootstrap's collapse class exposes a few events for hooking into collapse functionality.

Here is an example.

$('#bs-example-navbar-collapse-1').on('show.bs.collapse', function () {
  $(".slider").addClass("your-class");
})

$('#bs-example-navbar-collapse-1').on('hide.bs.collapse', function () {
  $(".slider").removeClass("your-class");
})
.slider {
  width: 100%;
  min-height: 100px;
  background-color: tomato;
}

.your-class {
  background-color: lawngreen;
}
<link href="https://maxcdn.bootstrapcdn./bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet"/>

<nav class="navbar navbar-default">
  <div class="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="#bs-example-navbar-collapse-1" aria-expanded="false">
        <span class="sr-only">Toggle navigation</span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
      </button>
      <a class="navbar-brand" href="#">Brand</a>
    </div>
    <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
      <ul class="nav navbar-nav">
        <li><a href="#">Link <span class="sr-only">(current)</span></a></li>
      </ul>
    </div>
  </div>
</nav>
<div class="slider"></div>

<script src="https://ajax.googleapis./ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn./bootstrap/3.3.6/js/bootstrap.min.js"></script>

The button you are are willing to click is having a class navbar-toggle and the div having navbar has an id navbar . So to achieve the click event on button you have to use the button id not the div id. So your jQuery code will go like:

$('.navbar-toggle').click(function(){
   if($('#navbar').hasClass('in')){
       $(".slider").addClass("sliderMove");
   }else{
       $(".slider").removeClass("sliderMove");
   }
});

As you would like to remove the class when you collapse the menu again using same button.

you were doing everything fine, but you need to use toggleClass() and select other CSS selector that is not #navbar

it also possible to add a delay? Because the class is already activated before the navbar is fully collapsed.

Yes it is possible, by adding setTimeout()

$(".collapsed").click(function() {
  // toggle the class after half second
  setTimeout(function() {
    $(".slider").toggleClass("sliderMove");
  }, 500);
});
/* just to show in small devices */

@media (max-width: 992px) {
  .sliderMove {
    background: red;
    height: 100vh;
    width: 100%
  }
}
<script src="https://ajax.googleapis./ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn./bootstrap/3.3.6/js/bootstrap.min.js"></script>
<link href="https://maxcdn.bootstrapcdn./bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet" />
<nav class="navbar navbar-default">
  <div class="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="#bs-example-navbar-collapse-1" aria-expanded="false">
        <span class="sr-only">Toggle navigation</span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
      </button>
      <a class="navbar-brand" href="#">Brand</a>
    </div>

    <!-- Collect the nav links, forms, and other content for toggling -->
    <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
      <ul class="nav navbar-nav">
        <li class="active"><a href="#">Link <span class="sr-only">(current)</span></a>
        </li>
        <li><a href="#">Link</a>
        </li>
        <li class="dropdown">
          <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Dropdown <span class="caret"></span></a>
          <ul class="dropdown-menu">
            <li><a href="#">Action</a>
            </li>
            <li><a href="#">Another action</a>
            </li>
            <li><a href="#">Something else here</a>
            </li>
            <li role="separator" class="divider"></li>
            <li><a href="#">Separated link</a>
            </li>
            <li role="separator" class="divider"></li>
            <li><a href="#">One more separated link</a>
            </li>
          </ul>
        </li>
      </ul>
      <form class="navbar-form navbar-left" role="search">
        <div class="form-group">
          <input type="text" class="form-control" placeholder="Search">
        </div>
        <button type="submit" class="btn btn-default">Submit</button>
      </form>
      <ul class="nav navbar-nav navbar-right">
        <li><a href="#">Link</a>
        </li>
        <li class="dropdown">
          <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Dropdown <span class="caret"></span></a>
          <ul class="dropdown-menu">
            <li><a href="#">Action</a>
            </li>
            <li><a href="#">Another action</a>
            </li>
            <li><a href="#">Something else here</a>
            </li>
            <li role="separator" class="divider"></li>
            <li><a href="#">Separated link</a>
            </li>
          </ul>
        </li>
      </ul>
    </div>
    <!-- /.navbar-collapse -->
  </div>
  <!-- /.container-fluid -->
</nav>
<div class="slider"></div>

Try something like this: (as you required when the user clicks the navbar-toggle button, adds a certain class to a certain div with jQuery)

$('body').ready(function() {
    $('.navbar-toggle').on('click', function() {
         $(".slider").toggleClass("sliderMove");  
    }); 
});

Try this

<nav class="navbar navbar-default navbar-static-top">
  <div class="container">
    <div class="navbar-header">
      <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar">
        <span class="sr-only">Toggle navigation</span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
      </button>
    </div>
    <div class="collapse navbar-collapse" id="navbar">
    <div class="slider">
  <div class="container">
    <div class="row">
      other elements 
    </div> <!-- close row -->
  </div> <!-- close container -->
</div> 
    </div><!-- /.navbar-collapse -->
  </div><!-- /.container -->
</nav>

Javascript

$('.navbar-collapse').on('click', function() {
     $(".slider").toggleClass("sliderMove");  
});

CSS

.sliderMove{
  height:100%;
  width:100%
}

DEMO HERE

发布评论

评论列表(0)

  1. 暂无评论