63 votes

Animation CSS onClick

Comment faire jouer une animation CSS avec un onClick JavaScript ? J'ai actuellement :

.classname {
  -webkit-animation-name: cssAnimation;
  -webkit-animation-duration:3s;
  -webkit-animation-iteration-count: 1;
  -webkit-animation-timing-function: ease;
  -webkit-animation-fill-mode: forwards;
}
@-webkit-keyframes cssAnimation {
  from {
    -webkit-transform: rotate(0deg) scale(1) skew(0deg) translate(100px);
  }
  to {
    -webkit-transform: rotate(0deg) scale(2) skew(0deg) translate(100px);
  }
}

Comment appliquer un onClick ?

71voto

Shisoft Points 1093

Etes-vous sûr que vous n'affichez votre page que sur webkit ? Voici le code, passé sur safari. L'image (id='img') tournera après un clic sur le bouton.

function ani() {
  document.getElementById('img').className = 'classname';
}

.classname {
  -webkit-animation-name: cssAnimation;
  -webkit-animation-duration: 3s;
  -webkit-animation-iteration-count: 1;
  -webkit-animation-timing-function: ease;
  -webkit-animation-fill-mode: forwards;
}

@-webkit-keyframes cssAnimation {
  from {
    -webkit-transform: rotate(0deg) scale(1) skew(0deg) translate(100px);
  }
  to {
    -webkit-transform: rotate(0deg) scale(2) skew(0deg) translate(100px);
  }
}

<input name="" type="button" onclick="ani()" value="Click">
<img id="img" src="https://i.stack.imgur.com/vghKS.png" width="328" height="328" />

53voto

Paul Fisher Points 6602

Il suffit d'utiliser le :active pseudo-classe . Ce paramètre est défini lorsque vous cliquez sur un élément quelconque.

.classname:active {
    /* animation css */
}

28voto

Chintsu Points 39

Solution trouvée sur css-tricks

const element = document.getElementById('img')

element.classList.remove('classname'); // reset animation
void element.offsetWidth; // trigger reflow
element.classList.add('classname'); // start animation

23voto

Vous pouvez y parvenir en liant un écouteur onclick, puis en ajoutant la classe animate comme suit :

$('#button').onClick(function(){
    $('#target_element').addClass('animate_class_name');
});

15voto

Abbas Points 620

La seule solution CSS qui fonctionne à chaque clic et joue l'animation jusqu'à la fin :

Tout ce que vous avez à faire est d'ajouter l'animation à la section :focus et lui donner la valeur none dans :active pseudo-classe.

Si votre élément n'est pas focalisable, ajoutez tabindex="0" à l'élément html :

@keyframes beat {
  0% {
    -webkit-transform: scale(1, 1);
            transform: scale(1, 1);
  }
  100% {
    -webkit-transform: scale(0.8,0.8);
            transform: scale(0.8, 0.8);
  }
}
.className {
  background-color:#07d;  
  color: #fff;
  font-family: sans-serif;
  font-size: 20px;
  padding: 20px;
  margin:5px;
  -webkit-transform: scale(1, 1);
          transform: scale(1, 1);
}
.className:focus {
  -webkit-animation: beat 1s ease-in-out backwards;
          animation: beat 1s ease-in-out backwards;
}
.className:active {
  -webkit-animation: none;
          animation: none;
}
body {
  text-align: center;
} 

<h3>Any element with tabindex="0", like a div:</h3>
<div tabindex="0" class="className"> Click me many times!</div>
<h3>Any focusable element like a button:</h3>
<button class="className"> Click me many times!</button>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X