IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Fonction Keyframes en javascript


Sujet :

JavaScript

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    retrait�
    Inscrit en
    Novembre 2017
    Messages
    6
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 73
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activit� : retrait�

    Informations forums :
    Inscription : Novembre 2017
    Messages : 6
    Par d�faut Fonction Keyframes en javascript
    Bonjour,
    J'ai cr�� un petit programme de deux images. Lorsque l'on clique sur la premi�re image elle se colorie en bleu, et clignote pendant quelques secondes, et la deuxi�me image se colorie en rouge.
    Lorsque l'on clique sur la deuxi�me image, elle se colorie en bleu et clignote, et la premi�re image de colorie en rouge.
    Toutefois si l'on renouvelle l'op�ration, les couleurs alternent bien, mais le clignotement ne s'op�re plus.
    Je pense qu'il existe une solution, pour que le clignotement s'op�re � chaque click.
    Je joins ce petit programme (sans les deux images).
    Merci � l'avance si on peux me d�paner.index.html
    Code html : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    <!DOCTYPE HTML>
    <html>
    <head>
    <title>Clignotement de pion</title>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=0" />
    <style>
    #case1, #case2 {
            width:50px;
            height:50px;
            display: block;
            border: 1px solid black;
            animation-duration: .2s;
            animation-iteration-count: 15;
             transition: none;
    }
    @keyframes clignoter {
      0%   { opacity:1; }
      40%   {opacity:0; }
      100% { opacity:1; }
    }
     
    </style>
    </head>
    <body>
    <h3>Clignotement de PION</h3>
    <div id="case1"><img src="pionBlanc.png"></div>
    <div id="case2"><img src="pionNoir.png"></div>
     
    <script type="text/javascript">
    const case1=document.getElementById("case1");
    const case2=document.getElementById("case2");
     
    case1.addEventListener ('click', function() {x=1; case1.style.backgroundColor="cyan"; couleur()});
    case2.addEventListener ('click', function() {x=2; case2.style.backgroundColor="cyan"; couleur()});
     
    function couleur () {
            if (x===1){case1.style.animationName="clignoter"; case2.style.backgroundColor="red"}
            if (x===2){case2.style.animationName="clignoter";case1.style.backgroundColor="red"}
    }
     
    </script>
    </body>
    </html>
    G�rard

  2. #2
    Mod�rateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 211
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Is�re (Rh�ne Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 211
    Par d�faut
    Bonjour,
    Je pense qu'il existe une solution, pour que le clignotement s'op�re � chaque click.
    oui, en fin d'animation il faut supprimer l'animation-name du style de ton �l�ment pour qu'elle se rejoue sinon il ne se passe rien.

    Exemple de solution :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    [case1, case2].forEach((el) => {
      el.onanimationend = function() {
        el.style.animationName = "none";
      }
    });
    Ressources :

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    retrait�
    Inscrit en
    Novembre 2017
    Messages
    6
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 73
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activit� : retrait�

    Informations forums :
    Inscription : Novembre 2017
    Messages : 6
    Par d�faut Keyframmes javascript
    Bonjour NoSmoking,
    Merci de votre r�ponse. Pribl�me r�solu. Tout fonctione correctement.
    Bonne journ�e.
    Cordialement. G�rard

  4. #4
    Mod�rateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 211
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Is�re (Rh�ne Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 211
    Par d�faut Compl�ment
    La solution retenue ci-dessus souffre de plusieurs d�fauts, � savoir que si tu ajoutes d'autres �l�ments devant clignoter il te faudra reprendre les fonctions pour ajouter ceux-ci ce qui va vite complexifier le code.

    De plus, au clic sur un �l�ment le clignotement en cours n'est pas interrompu, mais cela est peut-�tre voulu.

    Une solution qui a fait ses preuves et l'ajout/suppression d'une classe CSS pour la gestion des effets.

    Le ciblage des �l�ments pour affectation des �v�nements ce fait via la m�thode querySelectorAll("selector") et non plus via des id.

    Exemple HTML
    Code html : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    <div class="blink-animation pion-blanc"></div>
    <div class="blink-animation pion-noir"></div>
    <!-- autant que l'on en veut -->
    ... avec une r�cup�ration comme suit :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    const animElements = document.querySelectorAll(".blink-animation");
    Dans le cas o� l'on souhaite conserver le principe de fonctionnement initial on pourrait avoir :
    • Au clic on ajoute la classe CSS prenant en compte l'animation ;
    • en fin d'animation, on enl�ve cette classe CSS.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    const animElements = document.querySelectorAll(".blink-animation");
    animElements.forEach((el) => {
      el.addEventListener("click", () => {
        // ajout de la classe à l'élément cliqué
        el.classList.add("clignotement");
      });
      el.addEventListener("animationend", () => {
        // suppression de la classe en fin d'animation
        el.classList.remove("clignotement");
      })
    });
    Maintenant si l'on souhaite qu'� chaque nouveau clic toutes les animations en cours s'arr�tent il faut :
    • Au clic on enl�ve la classe CSS sur tous les �l�ments ;
    • on ajoute la classe CSS sur l'�l�ment.

    ... et modifier le code comme suit
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    const animElements = document.querySelectorAll(".blink-animation");
    animElements.forEach((el, ind, arr) => {
      el.addEventListener("click", (e) => {
        // on arrête toutes les animations encours en supprimant la classe à tous les éléments
        arr.forEach((a) => {
          a.classList.remove("clignotement");
        });
        // ajout de la classe à l'élément cliqué
        el.classList.add("clignotement");
      });
    });
    L'avantage de ces des deux derniers codes est qu'ils fonctionneront quelque soit le nombre d'�l�ments ayant la classe CSS blink-animation.

    Et pour finir le CSS associ� :
    Code css : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    .blink-animation {
      display: block;
      width: 50px;
      height: 50px;
      border: 1px solid #000;
      background-color: #F88;
      cursor: pointer;
    }
    .clignotement {
      background-color: #6FF;
      animation-name: clignoter;
      animation-duration: .2s;
      animation-iteration-count: 15;
    }

    Et pour vraiment finir code de test du dernier script :
    Code html : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    <!DOCTYPE html>
    <html lang="fr">
    <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Clignotement de pion</title>
    <meta name="Author" content="NoSmoking">
    <meta name="DVP-discussion" content="d2169800">
    <meta name="category" content="js">
    <meta name="description" content="Multiple clignotement d'éléments.">
    <style>
    .blink-animation {
      display: block;
      width: 50px;
      height: 50px;
      border: 1px solid #000;
      background-color: #F88;
      cursor: pointer;
    }
    .clignotement {
      background-color: #6FF;
      animation-name: clignoter;
      animation-duration: .2s;
      animation-iteration-count: 15;
    }
     
    @keyframes clignoter {
      0%   { opacity:1; }
      40%   {opacity:0; }
      100% { opacity:1; }
    }
     
    .pion-blanc:before,
    .pion-noir:before {
      content: "";
      display: block;
      width: 80%;
      height: 80%;
      border-radius: 50%;
      margin: 10%;
    }
    .pion-blanc:before {
      background-color: #FFF;
    }
    .pion-noir:before {
      background-color: #000;
    }
    </style>
    </head>
    <body>
    <div style="display:flex">
      <div class="blink-animation pion-blanc"></div>
      <div class="blink-animation pion-noir"></div>
      <div class="blink-animation pion-blanc"></div>
      <div class="blink-animation pion-noir"></div>
      <div class="blink-animation pion-blanc"></div>
      <div class="blink-animation pion-noir"></div>
      <div class="blink-animation pion-blanc"></div>
      <div class="blink-animation pion-noir"></div>
    </div>
    <script>
    const animElements = document.querySelectorAll(".blink-animation");
    animElements.forEach((el, ind, arr) => {
      el.addEventListener("click", (e) => {
        arr.forEach((a) => {
          a.classList.remove("clignotement");
        });
        el.classList.add("clignotement");
      });
    });
    </script>
    </body>
    </html>

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. [POO] Fonction Affichage OBjet Javascript!
    Par lekunfry dans le forum G�n�ral JavaScript
    R�ponses: 14
    Dernier message: 20/07/2007, 06h28
  2. La fonction sleep() en Javascript?
    Par jojob dans le forum G�n�ral JavaScript
    R�ponses: 7
    Dernier message: 25/10/2006, 16h16
  3. comment appeler une fonction JAVA en JAVASCRIPT ?
    Par heleneh dans le forum Servlets/JSP
    R�ponses: 2
    Dernier message: 13/09/2005, 12h21
  4. comment appeler une fonction JAVA en JAVASCRIPT ?
    Par heleneh dans le forum G�n�ral JavaScript
    R�ponses: 1
    Dernier message: 13/09/2005, 12h04
  5. [String] �quivalent de la fonction eval() en javascript
    Par jeyce dans le forum API standards et tierces
    R�ponses: 5
    Dernier message: 01/09/2004, 08h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo