2009-04-09 8 views
28

Se un elemento viene eliminato, desidero dissolverlo e far scorrere verso l'alto gli altri elementi per riempire lo spazio vuoto. Ora, quando uso fadeOut(), l'elemento non ha un'altezza alla fine, il che si traduce in altri elementi che salta in alto (invece di scorrere bene).jQuery: FadeOut poi SlideUp

Come posso slideUp() e elemento subito dopo fadeOut()?

+0

ho riscritto la mia quindi è una ginocchiera ora. – Powerlord

+1

Va notato che il motivo fadeOut causa un salto è che dopo che l'opacità è animata a 0, il display è impostato su none. fadeTo non lo fa, ecco perché funzionano le soluzioni sottostanti. –

risposta

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); 
    } 
}; 

L'ho provato su JQuery 1.3.2 e funziona.

Modifica: questo è il codice da cui l'ho chiamato. # Slide-allora-fade è l'ID di un elemento pulsante, l'articolo-text è una classe su un tag div:

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

Edit 2: modificati per utilizzare il built-in slideUp.

Edit 3: riscritto come un interruttore, e utilizzando fadeTo

+0

Ho dovuto abbandonare il parametro 'easing' per far funzionare il 'callback'. – bart

+0

Ah, OK. Come ricordo, le diapositive e le dissolvenze hanno argomenti diversi per l'attenuazione, quindi l'argomento di alleggerimento era comunque inutile. – Powerlord

+1

È possibile farlo nidificare? Ho provato questo> http://jsfiddle.net/59CQf/2/ ma non funziona – deathlock

1

Non si può catena?

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

EDIT:

Forse this aiuterà invece?

+0

No sfuma fino a nulla e poi fa una mossa difficile sull'elemento DOM. –

+0

Ah capisco, è un dolore. – Kezzer

+0

No, salta alla fine di fadeOut(). – bart

-1

La funzione fadeOut prende un secondo argomento opzionale di una funzione di callback, così si dovrebbe essere in grado di fare qualcosa del genere:

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

EDIT: Ho dimenticato di aggiungere la velocità del fadeOut come primo parametro

+0

Salta ancora :( – bart

+0

Che cos'è l'HTML e il CSS che stai manipolando? –

+0

non funziona perché hai fatto esattamente la stessa cosa del concatenamento.devi prima svanire fino all'1% e poi arrotolare –

54

Sembra che sarebbe meglio usare jQuery fadeTo comando

$(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.

Eseguendo ciascun comando nella funzione di richiamata del comando precedente, il comando non verrà eseguito fino a quando non si completa il precedente; un "salto" si verifica quando l'elemento viene rimosso dal DOM senza attendere il completamento della diapositiva.

+0

bella demo, vorrei che più gente lo facesse. – redsquare

+2

Wish stackoverflow fornirebbe una sandbox –

+0

Grazie. Ho scoperto jsbin qui su StackOverflow e lo sto usando da allora per fornire demo realizzabili nelle risposte - http://jsbin.com –

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

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

}); 
1

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

demo Here