2009-05-04 22 views
95

Me preguntaba, ¿cómo puedo ocultar un div después de unos segundos? Como los mensajes de Gmail, por ejemplo.Ocultar div después de unos segundos

He intentado lo mejor posible pero no puedo hacerlo funcionar.

+1

¿Se está ocultando lo suficiente o es necesario que se desvanezca? –

Respuesta

206

Esto ocultará el div después de 1 segundo (1000 milisegundos).

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

Si sólo desea ocultar, sin decoloración, utilizar hide().

+2

** y ** te has vuelto loco * Joel Coehoorn * muy bien de una sola vez! :) – cregox

+3

@James, por supuesto que no hay diferencia en el resultado final, pero supongo que la implementación con '.delay()' es más "nativa" y elegante para 'jQuery'. –

+0

puede reemplazar '.fadeOut ('fast')' con '.hide()' para ocultar al instante el div. – Raptor

2

Probablemente la forma más fácil es usar el plugin de temporizadores. http://plugins.jquery.com/project/timers y luego llamar algo así como

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

¿Hay alguna razón convincente para usar el plugin de temporizadores sobre setTimeout o setInterval? – spender

+2

Diría que descargar y adjuntar un plugin jquery es * less * fácil que simplemente usar setTimeout. –

+1

No creo que esto sea necesariamente algo malo, pero como es raro que use temporizadores en mi código, tener ese complemento (leer: código adicional, hinchazón) para esas pocas veces no supera el costo. Si estaba escribiendo un montón de código que necesitaba usar temporizadores, y estaba usando jQuery, puedo ver por qué este complemento sería muy útil para mantener la sintaxis de jQuery ... –

6
$.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/

(permite el encadenamiento de métodos)

3

Uso del temporizador jQuery también permitirá tener un nombre asociado con los temporizadores que están unido al objeto. De modo que podría adjuntar varios temporizadores a un objeto y detener cualquiera de ellos.

$("#myid").oneTime(1000, "mytimer1" function() { 
    $("#something").hide(); 
}).oneTime(2000, "mytimer2" function() { 
    $("#somethingelse").show(); 
}); 

$("#myid").stopTime("mytimer2"); 

La función eval (y sus parientes, función, setTimeout, setInterval y) proporcionan acceso al compilador de JavaScript. Esto a veces es necesario, pero en la mayoría de los casos indica la presencia de una codificación extremadamente mala. La función eval es la característica más mal utilizada de JavaScript.

http://www.jslint.com/lint.html

80

Usted puede intentar la llamada .delay()

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

el div ajustar el tiempo de retardo en milisegundos y establezca la propiedad que desea cambiar, en este caso he usado .fadeOut() por lo que podría ser animado, pero también puedes usar .hide().

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

+5

Esto es mejor porque no tengo que usar setTimeoutand code es más fácil de leer. –

+1

+1 porque esto maneja la ejecución múltiple del mismo código – Fanckush

10

Hay una manera muy sencilla de hacer esto.

El problema es que .delay solo afecta a las animaciones, por lo que lo que tiene que hacer es hacer que .hide() actúe como una animación dándole una duración.

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

Por lo que le da un buen corta duración, que parece ser instantánea al igual que la función .hide regular.

5

jquery ofrece una variedad de métodos para ocultar el div de forma cronometrada que no requiere configuración y posterior borrado o restablecimiento de temporizadores de intervalo u otros manejadores de eventos. Aquí están algunos ejemplos.

ocultar Pure ocultar

// hide in one second 
$('#mydiv').delay(1000).hide(0); 

animada

// start hide in one second, take 1/2 second for animated hide effect 
$('#mydiv').delay(1000).hide(500); 

fundido de salida

// start fade out in one second, take 300ms to fade 
$('#mydiv').delay(1000).fadeOut(300); 

Además, los métodos pueden tomar un nombre de cola o función como un segundo parámetro (dependiendo del método) La documentación de todas las llamadas anteriores y otras llamadas relacionadas se puede encontrar aquí: https://api.jquery.com/category/effects/

Cuestiones relacionadas