263 votes

Comment rendre un élément "flash" en jQuery ?

Je suis novice en matière de jQuery et j'ai une certaine expérience de l'utilisation de Prototype. Dans Prototype, il existe une méthode permettant de "faire clignoter" un élément, c'est-à-dire de le mettre brièvement en surbrillance dans une autre couleur et de le faire revenir à la normale afin d'attirer l'attention de l'utilisateur. Existe-t-il une telle méthode dans jQuery ? Je vois fadeIn, fadeOut et animate, mais je ne vois rien qui ressemble à "flash". Peut-être que l'une de ces trois méthodes peut être utilisée avec des entrées appropriées ?

4 votes

Cela ne répond pas à l'OP, mais le code (vaguement testé) peut être utile aux futurs chercheurs de Google (comme moi) : $.fn.flash = function(times, duration) { var T = this; times = times || 3; duration = duration || 200; for ( var i=0; i < times; i++ ) { (function() { setTimeout(function() { T.fadeOut(duration, function() { T.fadeIn(duration); }); }, i*duration*2+50); })(i); } };

3 votes

Ajoutez cette css à l'élément : text-decoration:blink puis le retirer.

0 votes

356voto

etlds Points 1236

Ma méthode est .fadein, .fadeout .fadein, .fadeout ......

$("#someElement").fadeOut(100).fadeIn(100).fadeOut(100).fadeIn(100);

function go1() { $("#demo1").fadeOut(100).fadeIn(100).fadeOut(100).fadeIn(100)}

function go2() { $('#demo2').delay(100).fadeOut().fadeIn('slow') }

#demo1,
#demo2 {
  text-align: center;
  font-family: Helvetica;
  background: IndianRed;
  height: 50px;
  line-height: 50px;
  width: 150px;
}

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button onclick="go1()">Click Me</button>
<div id='demo1'>My Element</div>
<br>
<button onclick="go2()">Click Me</button> (from comment)
<div id='demo2'>My Element</div>

14 votes

Ce n'est pas la plus belle solution, mais elle est courte, facile à comprendre et ne nécessite pas d'interface utilisateur/effets. Joli !

22 votes

J'utilise un délai avant la séquence fadeIn, fadeOut, quelque chose comme $('..').delay(100).fadeOut().fadeIn('slow')

1 votes

Les arrière-plans clignotants sont souvent de mauvais goût, ou tout simplement dérangeants - surtout si l'élément que vous faites clignoter se trouve sur un fond blanc uni. essayez d'abord ceci avant d'ajouter des plugins de couleur et d'essayer de faire clignoter des arrière-plans, etc.

126voto

curthipster Points 2146

Vous pouvez utiliser le plugin jQuery Color .

Par exemple, pour attirer l'attention sur tous les divs de votre page, vous pouvez utiliser le code suivant :

$("div").stop().css("background-color", "#FFFF9C")
    .animate({ backgroundColor: "#FFFFFF"}, 1500);

Edit - Nouveau et amélioré

La méthode suivante utilise la même technique que ci-dessus, mais elle présente les avantages supplémentaires suivants :

  • couleur et durée de la surbrillance paramétrées
  • conserver la couleur de fond originale, au lieu de supposer qu'elle est blanche
  • étant une extension de jQuery, vous pouvez l'utiliser sur n'importe quel objet

Étendre l'objet jQuery :

var notLocked = true;
$.fn.animateHighlight = function(highlightColor, duration) {
    var highlightBg = highlightColor || "#FFFF9C";
    var animateMs = duration || 1500;
    var originalBg = this.css("backgroundColor");
    if (notLocked) {
        notLocked = false;
        this.stop().css("background-color", highlightBg)
            .animate({backgroundColor: originalBg}, animateMs);
        setTimeout( function() { notLocked = true; }, animateMs);
    }
};

Exemple d'utilisation :

$("div").animateHighlight("#dd0000", 1000);

1 votes

Malheureusement, il y a un bug dans jQuery qui empêche par intermittence la couleur de changer -> dev.jqueryui.com/ticket/4251

1 votes

C'est assez polyvalent (vous pouvez animer n'importe quelle propriété, comme la couleur, au lieu de backgroundColor). En fait, il y a un bogue, mais si cet effet ne sert qu'à attirer l'attention, il suffit d'entourer l'appel d'un bloc try-catch : s'il échoue, il ne sera pas affiché, mais il ne produira pas d'erreurs non plus.

1 votes

Si quelqu'un se demande... cela fonctionnait maintenant ! (testé dans FF, Safari, Chrome)

104voto

vinay Points 751

Vous pouvez utiliser des animations css3 pour faire clignoter un élément

.flash {
  -moz-animation: flash 1s ease-out;
  -moz-animation-iteration-count: 1;

  -webkit-animation: flash 1s ease-out;
  -webkit-animation-iteration-count: 1;

  -ms-animation: flash 1s ease-out;
  -ms-animation-iteration-count: 1;
}

@keyframes flash {
    0% { background-color: transparent; }
    50% { background-color: #fbf8b2; }
    100% { background-color: transparent; }
}

@-webkit-keyframes flash {
    0% { background-color: transparent; }
    50% { background-color: #fbf8b2; }
    100% { background-color: transparent; }
}

@-moz-keyframes flash {
    0% { background-color: transparent; }
    50% { background-color: #fbf8b2; }
    100% { background-color: transparent; }
}

@-ms-keyframes flash {
    0% { background-color: transparent; }
    50% { background-color: #fbf8b2; }
    100% { background-color: transparent; }
}

Et vous jQuery pour ajouter la classe

jQuery(selector).addClass("flash");

0 votes

Belle solution, si elle ne doit fonctionner qu'une seule fois. Après l'ajout de la classe, l'ajout ultérieur de la classe n'entraîne pas (logiquement) le clignotement de l'élément.

7 votes

La meilleure idée du monde. J'ai utilisé un settimeout pour enlever la classe 2 secondes après l'effet.

7 votes

Voici un exemple de suppression de la classe une fois l'animation terminée, afin de pouvoir continuer à la faire clignoter. jsfiddle.net/daCrosby/eTcXX/1

46voto

Michiel Overeem Points 1750

Vous pourriez utiliser le effet de surbrillance dans jQuery UI pour réaliser la même chose, je suppose.

8 votes

Cela fait partie de jQueryUI, qui est assez lourd et ne fait pas partie de la bibliothèque standard de jQuery (bien que vous puissiez simplement utiliser le noyau des effets UI, sur lequel il repose).

3 votes

Vous pouvez télécharger juste le noyau des effets + l'effet que vous voulez, ce qui, pour "highlight" + "pulsate" représente 12 KB. Pas totalement léger, mais pas si lourd non plus.

44voto

SooDesuNe Points 3650

Si vous utilisez jQueryUI, il y a pulsate fonction dans UI/Effects

$("div").click(function () {
      $(this).effect("pulsate", { times:3 }, 2000);
});

http://docs.jquery.com/UI/Effects/Pulsate

1 votes

@DavidYell, ouvrez une nouvelle question et posez un exemple de code. pulsate fonctionne bien dans Chrome.

0 votes

Clignotement toutes les 5 secondes : setInterval(function() { $(".red-flag").effect("pulsate", { times:3 }, 2000) ; }, 5000) ;

0 votes

Quelqu'un sait-il si cela utilise des animations et/ou des transformations css3 ? Sympa en tout cas (mais je préfère quand même css3 comme dans l'une des autres réponses).

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