Search code examples
htmlcsshamburger-menubootstrap-5

Bootstrap 5 Hamburger Animation not working


SOLVED
Ok I solved the problem :)

The problem was:

$(function () {
    $('.navbar-toggler-button').on('click', function () {
  
      $('.animated-hamburger').toggleClass('open'); //Chrome expert mode says $ is not a function
    });
});

So I solved the problem with this:

jQuery(document).ready(function ($) {
    $('.navbar-toggler-button').on('click', function () {
  
      $('.animated-hamburger').toggleClass('open');
    });
});

I hope it helps another of you too :) Thanks for try to helping.


Question was:

I need help with some animations. I'm using Bootstrap 5 and I want to create a hamburger menu animation.

The following code snippets are from my webpage, but the animations don't work. The code snippets are sourced from: https://mdbootstrap.com/snippets/jquery/mdbootstrap/911054#html-tab-view

HTML CODE:

<nav id="navbar" class="navbar fixed-top navbar-expand-lg navbar-dark">
<div class="container-fluid container-fluid-mobile">
<jdoc:include type="modules" name="logo"/>
    
<button class="navbar-toggler navbar-toggler-button" type="button" data-bs-toggle="collapse" data-bs-target="#navigation"aria-controls="navigation" aria-expanded="false" aria-label="Toggle navigation">
<div class="animated-hamburger"><span></span><span></span><span></span></div>
</button>

<div class="collapse navbar-collapse" id="navigation">

<ul class="navbar-nav ms-auto mb-2 mb-lg-0 navbar-right nav-item">
<jdoc:include type="modules" name="navigation" onclick="toggleMenu() />
</ul>
<div class="collapse-show-bottom"></div>

</div>
</div>
</nav>

CSS Code:

.animated-hamburger {
    width: 30px !important;
    height: 20px !important;
    position: relative !important;
    margin: 0px !important;
    -webkit-transform: rotate(0deg) !important;
    -moz-transform: rotate(0deg) !important;
    -o-transform: rotate(0deg) !important;
    transform: rotate(0deg) !important;
    -webkit-transition: .5s ease-in-out !important;
    -moz-transition: .5s ease-in-out !important;
    -o-transition: .5s ease-in-out !important;
    transition: .5s ease-in-out !important;
    cursor: pointer !important;
}
    
.animated-hamburger span {
    display: block !important;
    position: absolute !important;
    height: 3px !important;
    width: 100% !important;
    border-radius: 9px !important;
    opacity: 1 !important;
    left: 0 !important;
    -webkit-transform: rotate(0deg) !important;
    -moz-transform: rotate(0deg) !important;
    -o-transform: rotate(0deg) !important;
    transform: rotate(0deg) !important;
    -webkit-transition: .25s ease-in-out !important;
    -moz-transition: .25s ease-in-out !important;
    -o-transition: .25s ease-in-out !important;
    transition: .25s ease-in-out !important;
}
    
.animated-hamburger span {
    background: #f3e5f5 !important;
}
    
.animated-hamburger span:nth-child(1) {
    top: 0px !important;
    -webkit-transform-origin: left center !important;
    -moz-transform-origin: left center !important;
    -o-transform-origin: left center !important;
    transform-origin: left center !important;
}
    
.animated-hamburger span:nth-child(2) {
    top: 10px !important;
    -webkit-transform-origin: left center !important;
    -moz-transform-origin: left center !important;
    -o-transform-origin: left center !important;
    transform-origin: left center !important;
}
    
.animated-hamburger span:nth-child(3) {
    top: 20px !important;
    -webkit-transform-origin: left center !important;
    -moz-transform-origin: left center !important;
    -o-transform-origin: left center !important;
    transform-origin: left center !important;
}
    
.animated-hamburger.open span:nth-child(1) {
    -webkit-transform: rotate(45deg) !important;
    -moz-transform: rotate(45deg) !important;
    -o-transform: rotate(45deg) !important;
    transform: rotate(45deg) !important;
    top: 0px !important;
    left: 8px !important;
}
    
.animated-hamburger.open span:nth-child(2) {
    width: 0% !important;
    opacity: 0 !important;
}
    
.animated-hamburger.open span:nth-child(3) {
    -webkit-transform: rotate(-45deg) !important;
    -moz-transform: rotate(-45deg) !important;
    -o-transform: rotate(-45deg) !important;
    transform: rotate(-45deg) !important;
    top: 21px !important;
    left: 8px !important;
}

JavaScript code:

$(function () {
    $('.navbar-toggler-button').on('click', function () {
  
      $('.animated-hamburger').toggleClass('open');
    });
});

Solution

  • just add JQuery libs to let the script work,

    EDITED: added event to close menu after clicking outside.

    here is an example;

    $(document).ready(function() {
        $('.navbar-toggler-button').on('click', function() {
          $('.animated-hamburger').toggleClass('open');
        });
        
        $(document).click(function(event) {
          var tover = $(event.target);
        if ($('.animated-hamburger').hasClass('open') && !tover.hasClass('animated-hamburger')) {
        $('.animated-hamburger').toggleClass('open');
        }
        });
    
    });
    .animated-hamburger {
        width: 30px !important;
        height: 20px !important;
        position: relative !important;
        margin: 0px !important;
        -webkit-transform: rotate(0deg) !important;
        -moz-transform: rotate(0deg) !important;
        -o-transform: rotate(0deg) !important;
        transform: rotate(0deg) !important;
        -webkit-transition: .5s ease-in-out !important;
        -moz-transition: .5s ease-in-out !important;
        -o-transition: .5s ease-in-out !important;
        transition: .5s ease-in-out !important;
        cursor: pointer !important;
    }
        
    .animated-hamburger span {
        display: block !important;
        position: absolute !important;
        height: 3px !important;
        width: 100% !important;
        border-radius: 9px !important;
        opacity: 1 !important;
        left: 0 !important;
        -webkit-transform: rotate(0deg) !important;
        -moz-transform: rotate(0deg) !important;
        -o-transform: rotate(0deg) !important;
        transform: rotate(0deg) !important;
        -webkit-transition: .25s ease-in-out !important;
        -moz-transition: .25s ease-in-out !important;
        -o-transition: .25s ease-in-out !important;
        transition: .25s ease-in-out !important;
    }
        
    .animated-hamburger span {
        background: #f3e5f5 !important;
    }
        
    .animated-hamburger span:nth-child(1) {
        top: 0px !important;
        -webkit-transform-origin: left center !important;
        -moz-transform-origin: left center !important;
        -o-transform-origin: left center !important;
        transform-origin: left center !important;
    }
        
    .animated-hamburger span:nth-child(2) {
        top: 10px !important;
        -webkit-transform-origin: left center !important;
        -moz-transform-origin: left center !important;
        -o-transform-origin: left center !important;
        transform-origin: left center !important;
    }
        
    .animated-hamburger span:nth-child(3) {
        top: 20px !important;
        -webkit-transform-origin: left center !important;
        -moz-transform-origin: left center !important;
        -o-transform-origin: left center !important;
        transform-origin: left center !important;
    }
        
    .animated-hamburger.open span:nth-child(1) {
        -webkit-transform: rotate(45deg) !important;
        -moz-transform: rotate(45deg) !important;
        -o-transform: rotate(45deg) !important;
        transform: rotate(45deg) !important;
        top: 0px !important;
        left: 8px !important;
    }
        
    .animated-hamburger.open span:nth-child(2) {
        width: 0% !important;
        opacity: 0 !important;
    }
        
    .animated-hamburger.open span:nth-child(3) {
        -webkit-transform: rotate(-45deg) !important;
        -moz-transform: rotate(-45deg) !important;
        -o-transform: rotate(-45deg) !important;
        transform: rotate(-45deg) !important;
        top: 21px !important;
        left: 8px !important;
    }
    <!-- JUST ADD THIS LINE -->
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <!-- ENDS HERE -->
    
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet">
    
    <nav id="navbar" class="navbar fixed-top navbar-expand-lg navbar-dark">
    <div class="container-fluid container-fluid-mobile">
    <jdoc:include type="modules" name="logo"/>
        
    <button class="navbar-toggler navbar-toggler-button" type="button" data-bs-toggle="collapse" data-bs-target="#navigation"aria-controls="navigation" aria-expanded="false" aria-label="Toggle navigation">
    <div class="animated-hamburger"><span></span><span></span><span></span></div>
    </button>
    
    <div class="collapse navbar-collapse" id="navigation">
    
    <ul class="navbar-nav ms-auto mb-2 mb-lg-0 navbar-right nav-item">
    <jdoc:include type="modules" name="navigation" onclick="toggleMenu() />
    </ul>
    <div class="collapse-show-bottom"></div>
    
    </div>
    </div>
    </nav>