¿Cómo se hace una pausa antes de desvanecer un elemento usando jQuery?
-
09-06-2019 - |
Pregunta
Me gustaría mostrar un mensaje de éxito en mi página.
Estoy usando jQuery fadeOut
método para desvanecer y luego eliminar el elemento.Puedo aumentar la duración para que dure más, sin embargo, esto parece extraño.
Lo que me gustaría que sucediera es que el elemento se muestre durante cinco segundos, luego se desvanezca rápidamente y finalmente se elimine.
¿Cómo puedes animar esto usando jQuery?
Solución
El nuevo delay()
La función en jQuery 1.4 debería funcionar.
$('#foo').fadeIn(200).delay(5000).fadeOut(200).remove();
Otros consejos
usar setTimeout(function(){$elem.hide();}, 5000);
Dónde $elem
es el elemento que desea ocultar, y 5000
es el retraso en milisegundos.De hecho, puedes usar cualquier función dentro de la llamada a setTimeout()
, ese código simplemente define una pequeña función anónima para simplificar.
Si bien el enfoque de @John Sheehan funciona, te topas con el Fallo de jQuery fadeIn/fadeOut ClearType en IE7.Personalmente, optaría por @John Millikin. setTimeout()
enfoque, pero si está configurado en un enfoque jQuery puro, es mejor activar una animación en una propiedad que no sea de opacidad, como un margen.
var left = parseInt($('#element').css('marginLeft'));
$('#element')
.animate({ marginLeft: left ? left : 0 }, 5000)
.fadeOut('fast');
Puede ser un poco más limpio si sabe que su margen es un valor fijo:
$('#element')
.animate({ marginLeft: 0 }, 5000)
.fadeOut('fast');
EDITAR:Parece el Complemento jQuery FxQueues hace justo lo que necesitas:
$('#element').fadeOut({
speed: 'fast',
preDelay: 5000
});
Para un enfoque jQuery puro, puedes hacer
$("#element").animate({opacity: 1.0}, 5000).fadeOut();
Es un truco, pero hace el trabajo.
var $msg = $('#msg-container-id');
$msg.fadeIn(function(){
setTimeout(function(){
$msg.fadeOut(function(){
$msg.remove();
});
},5000);
});
Siguiendo el comentario de dansays, lo siguiente parece funcionar perfectamente bien:
$('#thing') .animate({dummy:1}, 2000)
.animate({ etc ... });
Actualización para 1.6.2
La respuesta de Nathan Long hará que el elemento salte sin obedecer demora o fadeOut
.
Esto funciona:
$('#foo').delay(2000).fadeOut(2000);
La respuesta de dansays simplemente no funciona para mí.Por alguna razón, remove()
se ejecuta inmediatamente y el div desaparece antes de que ocurra cualquier animación.
Sin embargo, lo siguiente funciona (al omitir el remove()
método):
$('#foo').fadeIn(500).delay(5000).fadeOut(500);
No me importa si hay DIV ocultos en la página (de todos modos, no debería haber más que unos pocos).