2009-04-09 12 views
28

Si se está eliminando un elemento, me gustaría desvanecerlo y deslizar los demás elementos para llenar el espacio vacío. Ahora, cuando uso fadeOut(), el artículo no tiene una altura al final, lo que da como resultado que los otros elementos salten hacia arriba (en lugar de deslizarse muy bien).jQuery: FadeOut luego SlideUp

¿Cómo puedo slideUp() y elemento justo después de fadeOut()?

+0

Reescribí la mía, así que es un conmutador ahora. – Powerlord

+1

Debe tenerse en cuenta que el motivo por el cual fadeOut provoca un salto es que una vez que la opacidad se anima a 0, la visualización se establece en none. fadeTo no hace esto, razón por la cual funcionan las siguientes soluciones. –

Respuesta

39
jQuery.fn.fadeThenSlideToggle = function(speed, easing, callback) { 
    if (this.is(":hidden")) { 
    return this.slideDown(speed, easing).fadeTo(speed, 1, easing, callback); 
    } else { 
    return this.fadeTo(speed, 0, easing).slideUp(speed, easing, callback); 
    } 
}; 

Lo probé en JQuery 1.3.2, y funciona.

Editar: Este es el código desde el que lo llamé. # Deslizable entonces-fade es el ID de un elemento de botón, artículo de texto es una clase en una etiqueta div:

$(document).ready(function() { 
    $('#slide-then-fade').click(function() { 
    $('.article-text').fadeThenSlideToggle(); 
    }); 
}); 

Edición 2: Modificado de utilizar el incorporado en slideUp.

Datos 3: volver a escribir como una palanca, y el uso de fadeTo

+0

Tuve que soltar el parámetro 'easing' para que funcione la 'devolución de llamada'. – bart

+0

Ah, está bien. Según recuerdo, las diapositivas y los desvanecimientos tienen diferentes argumentos para suavizar, por lo que el argumento de relajación fue inútil de todos modos. – Powerlord

+1

¿Es posible anidar esto? Intenté esto> http://jsfiddle.net/59CQf/2/ pero no funciona – deathlock

1

¿No se puede encadenar?

$('myelement').fadeOut().slideUp(); 

EDITAR:

Tal this le ayudará en su lugar?

+0

No se desvanece a nada y luego hace un movimiento difícil en el elemento DOM. –

+0

Ah, ya veo, eso es un dolor. – Kezzer

+0

No, salta al final de fadeOut(). – bart

-1

La función fadeOut toma un segundo argumento opcional de una función de devolución de llamada, por lo que debería ser capaz de hacer algo como esto:

$('elementAbove').fadeOut(500, function() { 
    $('elementBelow').slideUp(); 
}); 

EDIT: se olvidó de agregar la velocidad de la fadeOut como primer parámetro

+0

Todavía salta :( – bart

+0

¿Cuál es el código HTML y CSS que estás manipulando? –

+0

no funciona porque esencialmente hiciste lo mismo que encadenar.Primero debes desvanecer al 1% y luego enrollar –

54

Suena como que sería mejor utilizar el comando jQuery fadeTo

$(function() { 

    $("#myButton").click(function() { 
     $("#myDiv").fadeTo("slow", 0.00, function(){ //fade 
      $(this).slideUp("slow", function() { //slide up 
       $(this).remove(); //then remove from the DOM 
      }); 
     }); 

    }); 

}); 

Working Demo here.

Al ejecutar cada comando en la función de devolución de llamada del comando anterior, el comando no se ejecutará hasta que se complete el anterior; se produce un "salto" cuando el elemento se elimina del DOM sin esperar a que se complete el deslizamiento.

+0

buena demostración, desearía que más gente lo hiciera. – redsquare

+2

Wish stackoverflow proporcionaría un sandbox –

+0

Gracias. Descubrí jsbin aquí en stackoverflow y lo he usado ya que para proporcionar demostraciones funcionales en las respuestas, http://jsbin.com –

1
$("#id").fadeIn(500, function() { 

    $("#id2").slideUp(500).delay(800).fadeOut(400); 

}); 
1

Trate $('.row').animate({ height: 'toggle', opacity: 'toggle' }, 'slow').slideUp();

demo Here

Cuestiones relacionadas