¿Cómo esperar 5 segundos con jQuery?


404

Estoy tratando de crear un efecto donde se carga la página, y después de 5 segundos, el mensaje de éxito en la pantalla se desvanece o se desliza hacia arriba.

¿Cómo puedo conseguir esto?

Respuestas:


733

Construido en javascript setTimeout .

setTimeout(
  function() 
  {
    //do something special
  }, 5000);

ACTUALIZACIÓN : desea esperar desde que la página ha terminado de cargarse, así que ponga ese código dentro de su $(document).ready(...);secuencia de comandos.

ACTUALIZACIÓN 2 : jquery 1.4.0 introdujo el .delaymétodo. Compruébelo usted mismo . Tenga en cuenta que .delay solo funciona con las colas de efectos jQuery.


2
¿Hay algo en jQuery que pueda usar en lugar de usar setTimeout?
Andrew

37
jQuery está escrito en javascript. Si incluye y usa jQuery, necesita javascript. Si tienes JavaScript, tienes setTimeout.
Alex Bagnolini

44
Si lo se. Quiero decir que $ ('. Mensaje'). Wait (5000) .slideUp (); Sería mucho más agradable. pero no creo que exista una función wait ().
Andrew

18
.delay (5000) rocas
demoncodemonkey

66
Solo una nota al margen: .delay solo funciona con las colas de efectos jQuery, por lo que es perfecto para diapositivas y desvanecimientos como este. Me tomó un tiempo darme cuenta de que no funciona para otras cosas que puedes hacer con jQuery.
Joel Beckham

61

Use un temporizador de JavaScript normal:

$(function(){
   function show_popup(){
      $("#message").slideUp();
   };
   window.setTimeout( show_popup, 5000 ); // 5 seconds
});

Esto esperará 5 segundos después de que el DOM esté listo. Si desea esperar hasta que la página esté realmente loadednecesita usar esto:

$(window).load(function(){
   function show_popup(){
      $("#message").slideUp();
   };
   window.setTimeout( show_popup, 5000 ); // 5 seconds
})

EDITAR: en respuesta al comentario del OP preguntando si hay una manera de hacerlo en jQuery y no usar setTimeoutla respuesta es no. Pero si quisieras hacerlo más "jQueryish" podrías envolverlo así:

$.wait = function( callback, seconds){
   return window.setTimeout( callback, seconds * 1000 );
}

Entonces podría llamarlo así:

$.wait( function(){ $("#message").slideUp() }, 5);

44

Me encontré con esta pregunta y pensé en proporcionar una actualización sobre este tema. jQuery (v1.5 +) incluye un Deferredmodelo que (a pesar de no adherirse a las especificaciones Promesas / A hasta que jQuery 3) se considere generalmente como una forma más clara de abordar muchos problemas asincrónicos. Implementar un $.wait()método usando este enfoque es particularmente legible, creo:

$.wait = function(ms) {
    var defer = $.Deferred();
    setTimeout(function() { defer.resolve(); }, ms);
    return defer;
};

Y así es como puedes usarlo:

$.wait(5000).then(disco);

Sin embargo, si después de una pausa, solo desea realizar acciones en una sola selección de jQuery, entonces debería usar el nativo de jQuery, .delay()que creo que también usa Deferred debajo del capó:

$(".my-element").delay(5000).fadeIn();

1
Ian Clark: ¡es una solución súper increíble! Me gusta mucho y lo usaré en mis proyectos. ¡Gracias!
Anton Danilchenko

No sé por qué este breve código no funciona
MR_AMDEV

26
setTimeout(function(){


},5000); 

Coloque su código dentro del { }

300 = 0.3 seconds

700 = 0.7 seconds

1000 = 1 second

2000= 2 seconds

2200 = 2.2 seconds

3500 = 3.5 seconds

10000 = 10 seconds

etc.


77
¿Cómo es esto diferente de la respuesta aceptada ?
Tunaki

2
formato / sintaxis y da una mayor aclaración sobre el tiempo.
maudulus

17

He estado usando este para una superposición de mensajes que se puede cerrar inmediatamente al hacer clic o se cierra automáticamente después de 10 segundos.

button = $('.status-button a', whatever);
if(button.hasClass('close')) {
  button.delay(10000).queue(function() {
    $(this).click().dequeue();
  });
}

1
+10, esta debería ser la respuesta correcta, .delay()y puede anidarse
wpcoder


6

Basado en la respuesta de Joey, se me ocurrió una solución prevista (por jQuery, leer sobre 'cola').

De alguna manera, sigue la sintaxis de jQuery.animate (): permite ser encadenado con otras funciones de fx, admite 'slow' y otras velocidades jQuery.fx. además de ser completamente jQuery. Y se manejará de la misma manera que las animaciones, si las detiene.

El campo de prueba jsFiddle con más usos (como mostrar .stop ()), se puede encontrar aquí .

El núcleo de la solución es:

$('<queue/>')
.delay(100 /*ms*/)
.queue( (next) => { $('#result').text('done.'); next(); } );
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="result"></div>

todo como un complemento, que admite el uso de $ .wait () y $ (..). wait ():

// add wait as $.wait() standalone and $(elem).wait() for animation chaining
(function($) {

  $.wait = function(duration, completeCallback, target) {
    $target = $(target || '<queue />');
    return $target.delay(duration).queue(function(next){completeCallback && completeCallback.call($target); next();});
  }

  $.fn.wait = function(duration, completeCallback) {
    return $.wait.call(this, duration, completeCallback, this);
  };

})(jQuery);

//TEST
$(function() {

  // stand alone
  $.wait(1000, function() {
    $('#result')
    .append('...done');
  });

  // chained
  $('#result')
  .append('go...')
  .wait('slow', function() {
    $(this).append('after slow');
  })
  .css({color: 'green'});
  
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="result"></div>

Nota: dado que wait se agrega a la pila de animación, $ .css () se ejecuta de inmediato, como se supone: comportamiento esperado de jQuery.


1
$( "#foo" ).slideUp( 300 ).delay( 5000 ).fadeIn( 400 );

1

Tenga en cuenta que esta es una vieja pregunta, pero escribí un complemento para abordar este problema que alguien podría encontrar útil.

https://github.com/madbook/jquery.wait

te permite hacer esto:

$('#myElement').addClass('load').wait(2000).addClass('done');
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.