Como alternar a animação do ícone de recolhimento no Bootstrap 4?

ajjsiraj

Estou usando um ícone Font Awesome personalizado para a barra de navegação recolhida no Bootstrap 4 e estou tentando fazer com que ele gire com um clique. Consegui fazer isso no primeiro clique, mas depois disso, não importa quantas vezes eu clique, as animações não disparam.

Aqui está o HTML para a parte da barra de navegação:

<nav class="navbar navbar-expand-lg navbar-dark bg-dark">

        <button id="toggler-btn" class="navbar-toggler btn" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent"
            aria-expanded="false" aria-label="Toggle navigation">
            <span id="clpse-icon" class="fa fa-arrow-down"></span>
        </button>

        <div class="collapse navbar-collapse" id="navbarSupportedContent">
            <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="#">Contact</a>
                </li>
                <li class="nav-item">
                    <a class="nav-link" href="#">About</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-default btn-outline-success my-2 my-sm-0" type="submit">Search</button>
            </form>
        </div>
    </nav>

E estas são as animações CSS:

.fa-arrow-down-animated {
    animation-name: collapse-icon-animation;
    animation-duration: 0.15s;
    animation-direction: normal;
    animation-timing-function: linear;
    animation-fill-mode:forwards;
}

.fa-arrow-up-animated {
    animation-name: collapse-icon-animation-reverse;
    animation-duration: 0.25s;
    animation-direction: normal;
    animation-timing-function: linear;
    animation-fill-mode:forwards;
}

@keyframes collapse-icon-animation {
    0% {
        transform: rotate(0deg);
    }
    100% {
        transform: rotate(180deg);
    }
}

@keyframes collapse-icon-animation-reverse {
    0% {
        transform: rotate(0deg);
    }
    100% {
        transform: rotate(360deg);
    }
}

E, finalmente, este é o código jQuery que estou usando:

$(document).ready(function () {

    $('#toggler-btn').on('click', function(){
        if($('#toggler-btn').attr('aria-expanded')){
            $('#clpse-icon').removeClass("fa-arrow-up-animated").addClass("fa-arrow-down-animated");
        }

        else{
            $('#clpse-icon').removeClass("fa-arrow-down-animated").addClass("fa-arrow-up-animated");
        }
    });
});

Ainda sou um iniciante, então espero que você explique com o máximo de detalhes possível sobre por que isso não funciona. Quando eu inspeciono o ícone, posso ver que as classes não estão sendo adicionadas / removidas após o primeiro clique, embora o código jquery deva ser ativado a cada clique. E desculpe antecipadamente se esta é uma pergunta repetida, mas estou procurando por um problema semelhante por horas e não encontrei um.

A. Meshu

Você pode usar o toggleClass(). Basta adicionar às span id="clpse-icon"classes: fa-arrow-down-animatedassim será:

<span id="clpse-icon" class="fa fa-arrow-down fa-arrow-down-animated"></span>

E você JSpode ser algo assim:

$(document).ready(function () {
    $('#toggler-btn').on('click', function(){  
      $('#clpse-icon').toggleClass( "fa-arrow-up-animated" );
    });
});

Snippet:

$(document).ready(function () {
    $('#toggler-btn').on('click', function(){  
      $('#clpse-icon').toggleClass( "fa-arrow-up-animated" );
    });
});
.fa-arrow-down-animated {
    animation-name: collapse-icon-animation;
    animation-duration: 0.15s;
    animation-direction: normal;
    animation-timing-function: linear;
    animation-fill-mode:forwards;
}

.fa-arrow-up-animated {
    animation-name: collapse-icon-animation-reverse;
    animation-duration: 0.25s;
    animation-direction: normal;
    animation-timing-function: linear;
    animation-fill-mode:forwards;
}

@keyframes collapse-icon-animation {
    0% {
        transform: rotate(0deg);
    }
    100% {
        transform: rotate(180deg);
    }
}

@keyframes collapse-icon-animation-reverse {
    0% {
        transform: rotate(0deg);
    }
    100% {
        transform: rotate(360deg);
    }
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/js/bootstrap.min.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css" rel="stylesheet"/>
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet"/>


<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
  <button id="toggler-btn" class="navbar-toggler btn" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
    <span id="clpse-icon" class="fa fa-arrow-down fa-arrow-down-animated"></span>
  </button>

  <div class="collapse navbar-collapse" id="navbarSupportedContent">
    <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="#">Contact</a>
      </li>
      <li class="nav-item">
        <a class="nav-link" href="#">About</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-default btn-outline-success my-2 my-sm-0" type="submit">Search</button>
    </form>
  </div>
</nav>

Você pode aprender sobre a toggleClasspartir de aqui . Aproveite o Code!

Este artigo é coletado da Internet.

Se houver alguma infração, entre em [email protected] Delete.

editar em
0

deixe-me dizer algumas palavras

0comentários
loginDepois de participar da revisão

Artigos relacionados

Como alterar o ícone de recolhimento da barra de navegação do bootstrap 4 com imagem SVG personalizada

Alternar o glifo com recolhimento de bootstrap

Como alternar o ícone do botão quando um menu suspenso de bootstrap é aberto

Como alterar o texto do botão no bootstrap 4 botões de recolhimento

Como alinhar os itens da barra de navegação do Bootstrap 4 à direita no recolhimento

Alternância de recolhimento da barra de navegação não desliga (após alternar do bootstrap v4 beta para v4 alpha 6)

Animação de recolhimento do Bootstrap 4 nav parando por uma fração de segundo ao abrir, ok fechando

Como posso remover a animação do ícone da viga de acordeão do Bootstrap 5?

O recolhimento do bootstrap 4 tem atraso

Como controlar a expansão/recolhimento do Accordian da interface do usuário do material clicando no ícone de outro componente?

Como definir a posição do ícone sobre a imagem no bootstrap 4

Como acessar o estado de recolhimento do painel react-bootstrap no título do painel?

Problema de recolhimento do Bootstrap 4 com barra de navegação de altura personalizada

O botão de recolhimento do Bootstrap 4 não está visível

Como mostrar uma div de recolhimento de bootstrap no clique do botão?

Como alterar a posição do ícone do validador de bootstrap

Bootstrap 3 alterar a imagem do ícone de recolhimento apenas no painel que está aberto?

Bootstrap 4: impede o recolhimento de empurrar o conteúdo para baixo

Margem do menu após o recolhimento da barra de navegação Bootstrap 4

Recolhimento da barra de navegação do Bootstrap 4 correto, mas não é possível expandir

É necessário alternar para bg-dark no cartão direcionado de recolhimento de bootstrap

Como expandir / desfazer o recolhimento do painel específico de FAQ (Bootstrap) via URL

Girar imagem SVG quando o recolhimento do Bootstrap 4 for clicado

Como alternar entre as classes do botão de bootstrap onClick?

Como evitar o recolhimento lento ao usar o recolhimento de bootstrap e div em uma tabela

como alterar a direção de recolhimento de um painel no bootstrap

como alterar o recolhimento dentro da cor de fundo do recolhimento com diferentes larguras internas. Acordeão do bootstrap 4.5

Como adicionar o ícone Font Awesome à esquerda do grupo de entrada no Bootstrap-vue ou Bootstrap 4?

Alternar entre os botões depois de esperar pela animação de recolhimento