2010-11-11 4 views
1

Bonsoir à tous!jQuery Accordion: problèmes de hauteur lors de l'utilisation de stop() pendant slideUp/slideDown -is data() une solution?

Je suis de nouveau coincé avec mon accordéon selfmade. J'ai un accordéon, avec semble essentiellement comme ceci:

<dl> 
<dt> <a href></a> </dt> 
<dd> Text </dd> 

<dt> <a href></a> </dt> 
<dd> Text </dd> 

<dt> <a href></a> </dt> 
<dd> Text </dd> 

<dt> <a href></a> </dt> 
<dd> Text </dd> 

<dt> <a href></a> </dt> 
<dd> Text </dd> 
</dl> 

Lorsque vous cliquez sur un lien, le précédemment caché dd juste derrière l'ancre slidesDown (respectivement lorsqu'un autre dd est visible, celui-ci slidesUp additionaly et si le dd juste derrière l'ancre est visible, il suffit de glisser-en d'autres termes: il n'y a qu'un seul des textes ouverts en même temps). Cela fonctionne plutôt bien, mais maintenant je suis coincé avec le problème suivant:

Lorsque vous cliquez plusieurs fois, les animations sont mises en file d'attente.

Ma solution consistait à utiliser .stop() avant le démarrage de l'animation. Fondamentalement cela fonctionne bien, mais cela cause un nouveau problème: la hauteur de l'élément est verrouillée à la valeur de l'animation est arrêtée et quand j'appelle à nouveau l'animation, elle ne s'estompe qu'à cette hauteur.

je cherché sur le web et il semble y avoir une solution, qui ressemble à ceci:

$("#elementId").data('origHeight',$("#elementId").height()); 

Cela devrait « stocker » la hauteur d'origine de l'élément et avec

$("#elementId").data('origHeight'); 

vous pouvez lire cette valeur. Mais je ne sais pas où mettre cela et comment cela fonctionne, si chaque élément de diapositive a une hauteur différente.

Si quelqu'un peut me aider avec ceci ou peut suggérer une autre façon, ce serait faire ma nuit totaly et les prochains jours

+0

Une raison particulière que vous ne l'utilisez [ l'accordéon de l'interface utilisateur jQuery] (http://docs.jquery.com/UI/Accordion)? Regardez au moins le code source, si ce n'est déjà fait. –

+0

Je veux m'habituer à jquery, donc je veux créer un accordéon pour moi-même. Et en fait cela fonctionne très bien à part ce problème, donc je suis très, très proche du but! Je ne veux pas abandonner maintenant et utiliser un plugin ;-) – Lucas

Répondre

0

Utilisez .stop(true,true); (ref)

+0

En fait j'ai déjà essayé ça et ça n'a pas fonctionné pour deux raisons: Si je double-clique sur une ancre, l'animation saute à la fin (et semble très laid ^^) et en plus, il y a une fonction (appelons-la coupe ^^) qui est appelée à la fin du slideDown, et une fonction avec annule la fonction de coupe, quand la slideDown d'une autre ancre est appelée. Ces deux fonctions sont appelées simultanément et seul "cut" est exécuté. – Lucas

+0

Donc, pour être clair: je ne veux pas que la première fonction se termine, mais qu'elle s'arrête instantanément, car la fonction de coupure ne sera pas appelée et tout ira bien. Sauf le problème avec la hauteur ne. – Lucas

+0

Avez-vous essayé '.stop (true)' alors? Ne pas ajouter le second booléen rend cette valeur par défaut à false et ne permet pas à l'animation de se terminer. Si cela ne vous aide pas, peut-être que si vous faisiez une démonstration de votre curseur sur http://jsfiddle.net/ cela aiderait à clarifier le problème. – Mottie

Questions connexes