148 votes

Masquer la division après quelques secondes

Je me demandais comment, en jquery, je peux cacher un div après quelques secondes ? Comme les messages de Gmail par exemple.

J'ai fait de mon mieux mais je n'arrive pas à le faire fonctionner.

2 votes

Est-ce que le fait de se cacher suffit, ou faut-il que ça s'estompe ?

289voto

swilliams Points 19415

Cela permettra de masquer la division après 1 seconde (1000 millisecondes).

setTimeout(function() {
    $('#mydiv').fadeOut('fast');
}, 1000); // <-- time in milliseconds

#mydiv{
    width: 100px;
    height: 100px;
    background: #000;
    color: #fff;
    text-align: center;
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="mydiv">myDiv</div>

Si vous voulez juste cacher sans décolorer, utilisez hide() .

3 votes

et vous avez battu la folie Joel Coehoorn très bien en un seul coup ! :)

3 votes

@James, Il est certain qu'il n'y a pas de différence dans le résultat final, mais je suppose que la mise en œuvre en utilisant .delay() est plus "native" et plus élégante pour jQuery .

0 votes

Vous pouvez remplacer .fadeOut('fast') avec .hide() pour le masquage instantané de la division.

95voto

peter punk Points 441

Vous pouvez essayer le .delay()

$(".formSentMsg").delay(3200).fadeOut(300);

appelez le div, définissez le délai en millisecondes et définissez la propriété que vous souhaitez modifier, dans ce cas, j'ai utilisé .fadeOut() pour qu'il puisse être animé, mais vous pouvez également utiliser .hide().

http://api.jquery.com/delay/

7 votes

C'est mieux car je n'ai pas besoin d'utiliser setTimeout et le code est plus facile à lire.

12voto

Oisin Lavery Points 1513

Il y a un moyen très simple de le faire.

Le problème est que .delay n'a d'effet que sur les animations. Vous devez donc faire en sorte que .hide() agisse comme une animation en lui donnant une durée.

$("#whatever").delay().hide(1);

En lui donnant une durée courte, elle semble être instantanée, tout comme la fonction .hide normale.

0 votes

Cela m'a aidé. Il est clair que vous devez passer un peu de à hide(), sinon delay() ne sera pas déclenché.

6voto

Peter Smit Points 5655
$.fn.delay = function(time, callback){
    // Empty function:
    jQuery.fx.step.delay = function(){};
    // Return meaningless animation, (will be added to queue)
    return this.animate({delay:1}, time, callback);
}

De http://james.padolsey.com/javascript/jquery-delay-plugin/

(Permet le chaînage des méthodes)

2voto

stimms Points 14986

Le moyen le plus simple est probablement d'utiliser le plugin timers. http://plugins.jquery.com/project/timers et ensuite appeler quelque chose comme

$(this).oneTime(1000, function() {
    $("#something").hide();
  });

1 votes

Y a-t-il une raison impérative d'utiliser le plugin timers plutôt que setTimeout ou setInterval ?

2 votes

Je dirais que télécharger et attacher un plugin jquery est moins plus facile que de simplement utiliser setTimeout.

1 votes

Je ne pense pas que ce soit nécessairement une mauvaise chose, mais comme il est rare que j'utilise des timers dans mon code, avoir ce plugin autour (lire : code supplémentaire, bloat) pour ces quelques fois ne compense pas le coût. Si vous écrivez beaucoup de code qui doit utiliser des timers, et que vous utilisez jQuery, je peux voir pourquoi ce plugin serait très utile pour respecter la syntaxe de jQuery...

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