Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1578 connectés 

  FORUM HardWare.fr
  Programmation
  HTML/CSS

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1721479
josephinea​ssoc
Posté le 22-04-2008 à 10:26:58  profilanswer
 

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
mood
Publicité
Posté le 22-04-2008 à 10:26:58  profilanswer
 

n°1722155
josephinea​ssoc
Posté le 22-04-2008 à 18:17:12  profilanswer
 

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).
 
++


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  HTML/CSS

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

 

Sujets relatifs
problème de menu(balise a:hover)[Résolu] Conseil rapide pour formulaire
[Résolu] Fonction count en PHP[Résolu]Include et GET
[Résolu] Boucle For et condition if[Résolu]Afficher résultat requête MAX
Menu flash avec AJAX, comment faire le lien?RESOLU PHP bbcode dans une shoutbox
[php + Ajax] include "dynamique?" [résolu]petit souci avec variable d'un Input [résolu]
Plus de sujets relatifs à : [Résolu] Menu déroulant animé : setTimeout()


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR