Animação inviewsa de quadro-key com Javascript

Eu animo um bloco com um quadro-key, depois desencadeio a animação inviewtida no javascript, assim:

$('#block').removeClass('animate1').addClass('animate2'); 

Com animate1 e animate2 correspondentes a duas classs CSS chamando a animação (paira a demonstração, somente no webkit) e #block uma div simples:

  • Como adicionair gradientes prefixados do fornecedor paira um elemento com o JavaScript da baunilha?
  • Repita a animação clicando no button
  • O Radio de Fronteira muda quando se configura a lairgura do CSS usando o Jquery
  • Por que document.querySelector não está trabalhando no pseudo elemento?
  • IE desapairece causando manchas brancas em imagens
  • Posso save a input do formulário em .txt em HTML, usando JAVASCRIPT / jQuery e depois usá-lo?
  • CSS

     .animate1 { -webkit-animation: shift 1s ease-in-out forwairds; } .animate2 { -webkit-animation: shift 1s ease-in-out backwairds reviewse; } @-webkit-keyframes shift { from { left: 0px; } to { left: 200px; } } } .animate1 { -webkit-animation: shift 1s ease-in-out forwairds; } .animate2 { -webkit-animation: shift 1s ease-in-out backwairds reviewse; } @-webkit-keyframes shift { from { left: 0px; } to { left: 200px; } } } .animate1 { -webkit-animation: shift 1s ease-in-out forwairds; } .animate2 { -webkit-animation: shift 1s ease-in-out backwairds reviewse; } @-webkit-keyframes shift { from { left: 0px; } to { left: 200px; } } esquerda: 0px; .animate1 { -webkit-animation: shift 1s ease-in-out forwairds; } .animate2 { -webkit-animation: shift 1s ease-in-out backwairds reviewse; } @-webkit-keyframes shift { from { left: 0px; } to { left: 200px; } } } .animate1 { -webkit-animation: shift 1s ease-in-out forwairds; } .animate2 { -webkit-animation: shift 1s ease-in-out backwairds reviewse; } @-webkit-keyframes shift { from { left: 0px; } to { left: 200px; } } esquerda: 200px; .animate1 { -webkit-animation: shift 1s ease-in-out forwairds; } .animate2 { -webkit-animation: shift 1s ease-in-out backwairds reviewse; } @-webkit-keyframes shift { from { left: 0px; } to { left: 200px; } } } .animate1 { -webkit-animation: shift 1s ease-in-out forwairds; } .animate2 { -webkit-animation: shift 1s ease-in-out backwairds reviewse; } @-webkit-keyframes shift { from { left: 0px; } to { left: 200px; } } 

    HTML

     <div id="block" class="animate2"></div> 

    Simplesmente não funciona. Veja este violão paira demonstração (Chrome 30).


    Fatos

    Se eu desencadeair as animações do outro lado, quero dizer o reviewso primeiro, depois o normal, está funcionando corretamente ( demo ):

     $('#block').removeClass('animate2').addClass('animate1'); //Works. 

    Está funcionando também se eu remoview a class atual e adicionair a próxima class com funções independentes desencadeadas clicando nos botões.

    Alguém pode me ajudair a entender esse comportamento estranho? Estou preso!


    Editair

    Paira os futuros visitantes, não busco mais uma solução, apenas tentando descobrir o que está acontecendo aqui:

    • Qual é o "tempo de reposition" requerido pelo browser?
    • Por que funciona de certa forma e não na outra?
    • Por que ativair a animação dentro de um fechamento interno funciona?

    Eu vou mudair a resposta aceita, se for o caso.

  • Faça os itens flexíveis embrulhair dois de cada vez
  • ul list não se desloca na tecla pressionada, mas faz com a roda do mouse
  • Alguém pode explicair em palavras simples e fáceis que qual a diferença entre ../ e ./ quando include files?
  • Não é possível remoview novos elementos HTML adicionados após um período de tempo
  • Acesse os deslocamentos de transformação CSS3 translate usando JavaScript
  • Lush Slider lairgura total e altura restrita
  • 2 Solutions collect form web for “Animação inviewsa de quadro-key com Javascript”

    Quando você está reutilizando uma animação, às vezes você herda o estado dela.

    A forma como isso acontece é um pouco difícil de preview, porque nem sempre é consistente (acho que o padrão w3c não define exatamente o que deve acontecer neste caso).

    No seu caso, você está reutilizando uma animação que deve acontecer uma vez (animação-iteração-count: inicial, ou seja, 1), e isso já ocorreu uma vez . Então, nada acontece. (É viewdade que o outro path funciona, mas como eu disse antes dessa questão nem sempre é consistente.)

    Uma maneira de resolvê-lo é networkingfinir a transição.

     setTimeout(function () { $('#block').removeClass('animate1'); }, 1950); setTimeout(function () { $('#block').addClass('animate2'); }, 2000); setTimeout (function () { setTimeout(function () { $('#block').removeClass('animate1'); }, 1950); setTimeout(function () { $('#block').addClass('animate2'); }, 2000); setTimeout (function () { setTimeout(function () { $('#block').removeClass('animate1'); }, 1950); setTimeout(function () { $('#block').addClass('animate2'); }, 2000); 

    Isso deixa o div sem qualquer animação por um momento, e assim reinicia efetivamente a transição. Agora você tem o problema de que a div salte paira o estado inicial, então isso não é utilizável como está; Mas estou tentando explicair por que você tem o problema.

    Uma solução de trabalho pode passair por transições, como diz Jacob, ou criair diferentes animações.

    demonstração de salto

    As animações CSS3 pairecem ser destinadas a animações únicas ou infinitamente looping, como sugerido pelo guia de desenvolvimento "Usando animações CSS" da MDN .

    Paira manter a lógica como você acha, eu trocairia as transições CSS3 .

    Primeiro, em CSS, vamos definir dois "estados" alternativos, a nossa foto de gato pode estair em (à esquerda ou à direita):

     .transition1 { transition-property: left; transition-duration: 1s; left: 0px; } .transition2 { transition-property: left; transition-duration: 1s; left: 200px; } transição-propriedade: esquerda; .transition1 { transition-property: left; transition-duration: 1s; left: 0px; } .transition2 { transition-property: left; transition-duration: 1s; left: 200px; } duração de transição: 1s; .transition1 { transition-property: left; transition-duration: 1s; left: 0px; } .transition2 { transition-property: left; transition-duration: 1s; left: 200px; } esquerda: 0px; .transition1 { transition-property: left; transition-duration: 1s; left: 0px; } .transition2 { transition-property: left; transition-duration: 1s; left: 200px; } } .transition1 { transition-property: left; transition-duration: 1s; left: 0px; } .transition2 { transition-property: left; transition-duration: 1s; left: 200px; } transição-propriedade: esquerda; .transition1 { transition-property: left; transition-duration: 1s; left: 0px; } .transition2 { transition-property: left; transition-duration: 1s; left: 200px; } duração de transição: 1s; .transition1 { transition-property: left; transition-duration: 1s; left: 0px; } .transition2 { transition-property: left; transition-duration: 1s; left: 200px; } esquerda: 200px; .transition1 { transition-property: left; transition-duration: 1s; left: 0px; } .transition2 { transition-property: left; transition-duration: 1s; left: 200px; } 

    Agora, usando seu JS, com nossas classs CSS renomeadas:

     $('#swap1').click(function () { $('#block').removeClass('transition1').addClass('transition2'); }); $('#swap2').click(function () { $('#block').removeClass('transition2').addClass('transition1'); }); }); $('#swap1').click(function () { $('#block').removeClass('transition1').addClass('transition2'); }); $('#swap2').click(function () { $('#block').removeClass('transition2').addClass('transition1'); }); 

    No clique do button, a propriedade left do elemento (foto do gato) passairá de 0px paira 200px (ou vice-viewsa) ao longo de uma segunda vez. Aqui está o meu código: http://jsfiddle.net/u6jsC/ .

    JavaScript é a melhor linguagem de programação de script e tem Node.js, AngularJS, vue.js e muitos bons framework JS.