Estoy seguro de que leí sobre esto el otro día, pero parece que no puedo encontrarlo en ningún lado.
Tengo un evento fadeOut()
después del cual elimino el elemento, pero jQuery está eliminando el elemento antes de que tenga la posibilidad de terminar de desvanecerse.
¿Cómo puedo obtener jQuery para esperar hasta que el elemento se haya desvanecido, y luego eliminarlo?¿Cómo hacer que jQuery espere hasta que se termine un efecto?
Respuesta
Puede especificar una función de devolución de llamada:
$(selector).fadeOut('slow', function() {
// will be called when the element finishes fading out
// if selector matches multiple elements it will be called once for each
});
si es algo que desea cambiar, atenuar uno y desvanecer otro en el mismo lugar, puede colocar un atributo {position: absolute} en los divs, para que las dos animaciones se superpongan, y usted no tiene que esperar a que termine una animación antes de comenzar la siguiente.
Con la versión jQuery 1.6 puede usar el método .promise()
.
$(selector).fadeOut('slow');
$(selector).promise().done(function(){
// will be called when all the animations on the queue finish
});
Esto es redundante para la mayoría de las animaciones jQuery ya que hay argumentos de devolución de llamada en la mayoría de los métodos, pero usando 'promise()' o 'when()' y 'done()' puede aprovechar un comportamiento muy bueno de los métodos de terceros, o incluso los suyos propios. +1 para significar '.promise()'! – stuartc
¡Gran solución! –
No he oído esto antes, solo me salvó el trasero. – prismspecs
Puede también utilizar $.when()
que esperar hasta que el promise
final:
var myEvent = function() {
$(selector).fadeOut('fast');
};
$.when(myEvent()).done(function() {
console.log('Task finished.');
});
En caso de que usted está haciendo una solicitud para que así pudiera fallar, después, se puede ir un paso más allá:
$.when(myEvent())
.done(function(d) {
console.log(d, 'Task done.');
})
.fail(function(err) {
console.log(err, 'Task failed.');
})
// Runs always
.then(function(data, textStatus, jqXHR) {
console.log(jqXHR.status, textStatus, 'Status 200/"OK"?');
});
Esta parte de esta respuesta que usa '$ .when()' no funciona porque 'myEvent()' no devuelve una promesa y '$.when() 'espera que le pase una o más promesas para que haga su trabajo. – jfriend00
- 1. Espere a que SwingWorker termine
- 2. Espere hasta que se cargue la función
- 3. Espere a que tomcat termine de iniciar
- 4. Espere hasta que se haya completado .append()
- 5. Espere hasta que QWidget cierre
- 6. jQuery Ajax espere hasta que se carguen todas las imágenes
- 7. jQuery Espere hasta que las llamadas async ajax hayan finalizado
- 8. Espere a que termine un subproceso desconectado en C++
- 9. ¿Cómo hacer que MainThread espere hasta que se realice alguna acción asíncrona?
- 10. Android Animation: ¿esperar hasta que termine?
- 11. QML: espere hasta que finalicen las animaciones
- 12. EC2 Java Api Espere hasta que se cree Ec2 Instance.
- 13. VBScript - ¿Cómo hacer que el programa espere hasta que el proceso haya finalizado?
- 14. espere hasta que wifi se conecte a android
- 15. Espere hasta que Application.Calculate haya terminado
- 16. interfaz gráfica de usuario que no se actualiza hasta que se termine código
- 17. jQuery Añadir archivo CSS y esperar hasta que se cargue?
- 18. ¿Cómo decirle a PowerShell que espere a que termine cada comando antes de comenzar el siguiente?
- 19. Java: espere el proceso de ejecución hasta que salga
- 20. ¿Cómo puedo hacer que un script espere una contraseña?
- 21. Haciendo que un programa python espere hasta que Twisted deferred devuelva un valor
- 22. Espere la función hasta que el usuario deje de escribir
- 23. ¿Cómo esperar a que termine un animador?
- 24. Hacer que un JScrollPane se desplace automáticamente hasta el final
- 25. jquery cómo hacer un efecto de volteo?
- 26. ¿Las referencias javascript externas hacen que el navegador espere hasta que se descarguen?
- 27. Ejecute una aplicación con PowerShell y espere hasta que finalice
- 28. Espere a que el proceso termine y luego muestre el mensaje (C#)
- 29. Cómo esperar a que un ThreadPoolExecutor termine
- 30. espere a que se conecte gdb
Bingo. Pensé que era eso, pero lo que tenía que hacer era poner toda mi función allí, no solo la parte eliminada. PD Si a alguien le interesa, el libro en el que lo leí y que he encontrado nuevamente es Learning JQuery - Better Interaction and Design. Gracias de nuevo – uriDium
Si alguien tiene jQuery antiguo, este error de "devolución de animación hecha fue desagradable": http://bugs.jquery.com/ticket/5684 – JustAMartin
Aquí va su número de upvote 100 – kaiser