[Résolu] Menu déroulant animé : setTimeout()

Menu déroulant animé : setTimeout() [Résolu] - HTML/CSS - Programmation

Marsh Posté le 22-04-2008 à 10:26:58    

Bonjour,
 
Bon d'abord pour le pseudo, je suis un GROS posteur (merci les modos de pas balancer :D) et c'est un multinick créé pour l'occasion. Promis j'ai pas mal traîné sur Prog à une époque [:cosmoschtroumpf]
 
Je code donc, en ce moment, un site pour une association. En bénévole, bin ouais c'est pour ma copine :/
 
Le but est de faire un menu déroulant en Javascript, langage que je connais donc assez mal.
 
A priori, c'est plutôt simple : on crée un cadre caché, et quand on clique où il faut, on le décache, puis on le déplace en utilisant les propriétés style.visibility, style.top et offsetTop.
 
Le code de base :  
 

Code :
  1. <!-- LE MENU -->
  2. <div id="gauche">
  3. <table class="tablemenu">
  4. <tr>
  5.  <td><a class="menuGen" href="javascript:void(0);" onClick="ChangePositionMenu(\'MENU_BAS\');">Menu</a></td>
  6. </tr>
  7. </table>
  8. <div id="MENU_BAS" style="visibility: hidden;">
  9.  <items du menu>
  10. </div>
  11. </div>


 

Code :
  1. // Fonctions Javascript
  2. function ChangePositionMenu(id) {
  3.     var elem = document.getElementById(id);
  4.     elem.style.visibility = "visible";
  5.    
  6.     while(elem.offsetTop < 200) {
  7.      elem.style.top += t + 1;
  8.    }
  9. }


 
Mais comme vous l'imaginez, quand on clique, ça déplace bien le menu comme il faut, mais instantanément. C'est là que vient théoriquement se greffer la fonction setTimeout() :
 
 

Code :
  1. // Fonctions Javascript
  2. function ChangePositionMenu(id) {
  3.     var elem = document.getElementById(id);
  4.     elem.style.visibility = "visible";
  5.    
  6.     if(elem.offsetTop < 200) {
  7.      elem.style.top += t + 1;
  8.         setTimeout(ChangePositionMenu(id), 10);
  9.    }
  10. }


 
On passe d'un while à un if vu qu'un while n'est plus nécessaire dans le cadre d'un appel récursif.
 
Le souci est que le premier appel fonctionne bien, mais ensuite... Il mouline dans le vide.
 
Je ne vois vraiment pas ce qui ne tourne pas, si vous avez une idée... merci d'avance !
 
NB : le code est volontairement très incomplet, on se concentre sur ce qui ne marche pas.
 
++


Message édité par josephineassoc le 22-04-2008 à 18:18:19
Reply

Marsh Posté le 22-04-2008 à 10:26:58   

Reply

Marsh Posté le 22-04-2008 à 18:17:12    

Bon bin après une journée d'efforts et l'aide d'un pote, c'est résolu !
 
Voici donc le code final, pour ceux que ça intéresse :
 

Code :
  1. function ChangePositionMenu(id) {
  2.     var elem = document.getElementById(id);
  3.     elem.style.visibility = "visible";
  4.  
  5.     if(elem.offsetTop < 200) {
  6.      elem.style.top = (parseInt( menubas.offsetTop, 10) + 1) +"px";
  7.         setTimeout(ChangePositionMenu(id), 10);
  8.    }
  9. }


 
C'était la ligne où l'on modifiait la propriété qui posait problème.
 
Ce code peut servir de base à tout menu animé, j'ai ensuite fait un truc à base d'images (pour utiliser une police non standard).
 
++

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed