J'ai essayé de glisser dans et hors d'un DIV avec la fonction de bascule de jQuery, mais le résultat est toujours nerveux au début et/ou fin de l'animation. Voici le code js que j'utilise:
$(document).ready(function(){
$('#link1').click(
function() {
$('#note_1').parent().slideToggle(5000);
}
);
Et le code HTML:
<div class="notice">
<p>Here's some text. And more text. <span id="link1">Test1</span></p>
<div class="wrapper">
<div id="note_1">
<p>Some content</p>
<p>More blalba</p>
</div>
</div>
</div>
Vous pouvez également voir l'exemple complet ici: jQuery Slide test
Habituellement, j'utilise Mootools et je peux le faire glisser sans aucun problème avec elle. Mais je commence un nouveau projet dans Django et la plupart des app dans Django utiliser jQuery. Donc, pour que et après la lecture de ce jQuery vs Mootools j'ai décidé que ce sera une bonne occasion pour commencer à l'aide de jQuery. Donc, mon premier souci était de glisser cette DIV. Et ça ne fonctionne pas correctement.
Je n'ai plus de recherche et j'ai trouvé que c'est un vieux bug dans jQuery, avec de la marge et le remplissage appliquée à la DIV. La solution consiste à envelopper la DIV dans un autre DIV. Il n'a pas de résoudre la chose dans mon cas.
La recherche, j'ai trouvé ce post Slidedown animation jumprevisited. Il fixer un saut à une fin, mais pas à l'autre (Test2 en jQuery Slide test).
Sur un Débordement de Pile, j'ai trouvé ce jQuery IE saccadé de l'animation de diapositives. Dans les commentaires j'ai vu que le problème est avec la balise P à l'intérieur de la DIV. Si je remplace les balises P avec des balises DIV qui résout le problème mais ce n'est pas une bonne solution.
Enfin, j'ai trouvé cela Bizarre jQuery comportement de la diapositive. Le lisant, j'ai compris que le problème résolu par le passage de P balise DIV est avec les marges de la P (non présent dans la DIV) et de la réduction des marges entre les éléments. Donc, si je switch les marges pour les rembourrages il résoudre le problème. Mais je lâche l'effondrement comportement de marges, l'effondrement des que je veux.
Honnêtement, je peux dire que ma première expérience avec jQuery n'est pas vraiment bon. Si je veux utiliser un simple effet en jQuery que j'ai de ne pas utiliser la fonction propre (slideToggle) mais au lieu d'utiliser certaines faites à la main le code ET envelopper la DIV dans un autre DIV commutateur ET de marges à des remplissages, de jouer ma mise en page.
Ai-je raté une solution plus simple ?
Comme krdluzni suggèrent, j'ai essayé d'écrire comme script personnalisé avec l'animer méthode. Voici mon code:
var $div = $('#note_2').parent();
var height = $div.height();
$('#link2').click(
function () {
if ( $div.height() > 0 ) {
$div.animate({ height: 0 }, { duration: 5000 }).css('overflow', 'hidden');
} else {
$div.animate({ height : height }, { duration: 5000 });
}
return false;
});
Mais cela ne fonctionne pas, soit parce jQuery toujours régler le dépassement de visible à la fin de l'animation. Si la DIV est reapearing à la fin de l'animation, mais en surimpression sur le reste du contenu.
J'ai essayé aussi avec de l'INTERFACE utilisateur.Slide (et l'Échelle et la Taille). Il fonctionne, mais le contenu en dessous de la DIV ne se déplace pas avec l'animation. Il ne sauter à la fin/début de l'animation pour combler l'écart. Je n'en veux pas.
Mise à JOUR:
Une partie de la solution est de définir la hauteur de la DIV conteneur dynamiquement avant quoi que ce soit. Ce résoudre un saut. Mais pas la seule cause par l'effondrement de la marge. Voici le code:
var parent_div = $("#note_1").parent();
parent_div.css("height", parent_div.height()+"px");
parent_div.hide();
DEUXIÈME MISE À JOUR:
Vous pouvez voir le bug sur le jQuery propre site à cette page (Exemple B): Tutoriels:des Exemples Vivants de jQuery
TROISIÈME MISE À JOUR:
Essayé avec jQuery 1.4, pas plus de chance :-(