Comment faire glisser un div puis .fadeIn () le contenu et vice versa?

Objectif

Lorsqu’un utilisateur clique sur le bouton, la div en question va:

  1. glisse vers le bas
  2. Arrêtez
  3. fondu dans le contenu

Lorsque l’utilisateur clique à nouveau sur le bouton, le div va:

  1. disparaître
  2. Arrêtez
  3. glisser vers le haut

Position actuelle

Voici un exemple où le fadeIn et le fadeOut se produisent au bon moment mais où il n’y a pas d’effet de glissement avant et après le fadeIn et le fadeOut respectivement
http://jsfiddle.net/tkRGU/1/

Il existe également cette option qui a la fonction slideToggle mais n’a pas les fadeIn et fadeOut se produisant respectivement avant et avant la diapositive.
http://jsfiddle.net/MY8DD/7/

Cela fonctionnera:

HTML:

toggle  

Javascript:

 function toggleSlider() { if ($("#panelThatSlides").is(":visible")) { $("#contentThatFades").animate( { opacity: "0" }, 600, function(){ $("#panelThatSlides").slideUp(); } ); } else { $("#panelThatSlides").slideDown(600, function(){ $("#contentThatFades").animate( { opacity: "1" }, 600 ); }); } } 

Exemple de travail sur JS Fiddle .

Pour IE, assurez-vous qu’il y a une couleur d’arrière-plan derrière le contenu de cleartype.

Comme vous voulez que les deux opérations se déroulent simultanément, vous devez utiliser la fonction animate . Sinon, les actions viendront les unes après les autres.

Si vous connaissez la hauteur de l’élément avant de l’exécuter, vous pouvez régler les choses assez facilement. Voici un exemple extrêmement approximatif: http://jsfiddle.net/tArQu/

 $("#button").toggle(function(){ $("#content").slideDown().fadeIn(); }, function(){ $("#content").slideUp().fadeOut(); return false; }); 

C’est ce que tu veux?

Si vous ne connaissez pas la hauteur de l’élément à l’avance, la procédure est légèrement plus compliquée. Vous devez animer l’opacité directement pour s’atténuer et vous devez masquer le contenu avec la visibilité CSS pendant qu’il est “glissant”.

La visibilité CSS “masquée” permet au contenu d’occuper l’espace dans le document comme il le ferait normalement, tout en restant masqué; L’affichage CSS “aucun” ne fait pas que masquer l’élément, il le supprime du stream de documents. En masquant l’élément à l’aide de la visibilité, vous pouvez le faire glisser jusqu’à ce qu’il atteigne toute sa hauteur, le contenu de l’élément demeurant invisible.

De même, le contenu atténué lors de l’utilisation de la fonction fadeIn de jQuery suppose qu’un élément est initialement masqué avec l’affichage “none”. Par conséquent, cela ne fonctionnera pas si nous utilisons la visibilité. Au lieu de cela, nous rendons l’élément initialement totalement transparent (opacité 0.0); une fois l’animation glissante terminée, nous définissons la visibilité sur “visible” puis animons l’opacité de totalement transparent à totalement opaque (0,0 à 1,0).

En supposant que l’élément soit initialement masqué (fonction d’affichage CSS “none” ou fonction de masquage jQuery):

 $(element).css("visibility", "hidden").slideDown("slow", function() { $(this).css("opacity", 0.0).css("visibility", "visible").animate({ "opacity": 1.0 }, "slow"); }); 

NB: Soyez très prudent en tapant “visibilité” et “visible” car ils sont facilement mal orthographiés – source de nombreux bugs frustrants.

Vous ne devez PAS utiliser la visibilité, car vous pouvez accomplir la même chose en rendant le contenu initialement transparent, mais son utilisation rend plus explicite ce qui se passe. C’est-à-dire que cela fonctionne aussi:

 $(element).css("opacity", 0.0).slideDown("slow", function() { $(this).animate({ "opacity": 1.0 }, "slow"); });