2009-02-11 16 views
34

¿Hay alguna forma de desvanecer un div después de 5 segundos sin utilizar una función setTimeOut?¿Cómo puedo desvanecer un div usando jQuery?

+0

¿Desea que la animación dure 5 segundos o desea esperar 5 segundos antes de que comience la animación? –

+0

Sí, quiero esperar 5 segundos antes de que comience la animación. Está resuelto, escribí función a $ ("div"). FadeOut (10000); entonces está funcionando como lo que quiero hacer exactamente! –

Respuesta

111

todos saben que en jquery 1.4 hay una función de retardo ahora, ¿no?

$('#div').delay(5000).fadeOut(400) 

así es como lo hace, sin tener que agregar funciones personalizadas o complementos. es nativo de jquery 1.4

0

Asumiendo que significa 'esperar cinco segundos y después desaparecerá', creo que vas a tener que usar un plugin para forzar el retraso, por ejemplo this one

1

No está seguro de si desea que se lleve 5 segundos o inicio en 5 segundos

Para que tome 5 segundos: la función jQuery fadeout se puede utilizar en un div, y reducirá la opacidad del elemento hasta que sea 0 y luego no muestre ninguno. La velocidad del fundido es un parámetro para la función.

http://docs.jquery.com/Effects/fadeOut#speedcallback

para iniciarlo en 5 segundos, usted necesitará algún tipo de temporizador que se inicia cuando el documento o ventana está listo, o cuando el div está listo dependiendo de lo que desee.

20

Qué tal la función fadeOut(). Sería algo como esto:

$("#myDiv").fadeOut(5000); 
+6

Esto realmente no responde la pregunta. Él quiere desaparecer * después de * 5 segundos, no tener el último fundido * durante * 5 segundos. –

+0

quiero esperar 5 segundos antes de que comience la animación. Está resuelto, escribí la función como $ ("div"). FadeOut (10000); entonces está funcionando como lo que quiero hacer exactamente sin utilizar la función setTimeOut(). ¡Gracias! –

+0

En realidad fadeout empezar de inmediato :( –

29

Caso 1: si quieres comenzar fadeOut después de 5 segundos, utilice esto:

jQuery.fn.delay = function(time,func){ 
    return this.each(function(){ 
     setTimeout(func,time); 
    }); 
}; 

A continuación, utilizar de esta manera:

$('#div').delay(5000, function(){$(#div').fadeOut()}) 

No puede lograr esto sin usar setTimeOut en absoluto

C ase 2: si desea que el duración de fadeOut a ser de 5 segundos, utilice esto:

$('#div').fadeOut(5000) 
+0

Muy bueno y útil :) ¡justo lo que buscaba! ¡Aclamaciones! –

1

// i utilizar este plugin de pausa que acabo de escribir

$.fn.pause = function(duration) { 
    $(this).animate({ dummy: 1 }, duration); 
    return this; 
}; 

Llamada así:

$("#mainImage").pause(5000).fadeOut(); 

Nota: no necesita una devolución de llamada.

+0

por alguna razón pause (5000) .css ("opacity", .5) no se detiene antes de configurar la opacidad, pero funciona para fadeout. a alguien le importa explicar? Nota: cuando dije "complemento, simplemente escribí", estaba tratando de indicar "no completamente probado", pero debería funcionar para lo que se solicitó. –

+0

css() no usa la cola de animación. si quiere hacer una pausa antes de cambiar la opacidad, necesitará algo como "pausa (5000) .animate ({'opacidad': 0.5}); – mishac

6

Acabo de tener el mismo problema y, en mi opinión, la respuesta correcta realmente no satisface la pregunta. Si uno especifica que como

$("#myDiv").fadeOut(5000); 

como suggsted, el proceso de decoloración en sí tendrá una duración de 5 segundos, pero no inicio después de 5 segundos.

Así que yo estaba buscando una alternativa, sin tener que incluir otro plugin de jQuery etc. La solución más simple que se me ocurrió fue que escribirlo de la siguiente manera:

$("#myDiv").fadeTo(5000,1).fadeOut(1000); 

Se utiliza el efecto fadeTo y es de alguna manera un "truco". Dejo que fadeTo se ejecute durante 5 segundos y lo dejo fundido a 1 = 100% de opacidad. De esta forma, el usuario no percibe ningún cambio. Luego, la llamada normal a fadeOut con una duración del efecto de 1 segundo.

Supongo que esta solución es bastante simple ya que no requiere ningún complemento adicional y se puede escribir en 1 línea.

Saludos.

// EDIT:
Al parecer, ahora existe la posibilidad de hacer algo como esto:

$('#myDiv').delay(800).fadeOut(1000); 

Here are algunas funciones útiles, más fresco.

Cuestiones relacionadas