Partage
  • Partager sur Facebook
  • Partager sur Twitter

evenement setTimeout

Sujet résolu
    16 juin 2010 à 15:52:55

    Salut à tous !

    Bon je viens de débuter sur le JS, et j'ai quelques petites questions.

    J'aimerais me créer un petit menu déroulant avec scriptaculous.

    J'ai un problème, j'aimerai que mon menu s'éxécute seulement quand on passe le curseur une seconde dessus. J'ai essayé avec settimeout, ça fonctionne... Mais a moitier on peut dire puisque quand je passe le cursur dessus vite fait, il me fait planté mon script.

    J'attend toutes remarques constructif au niveau du code, puisque je suis débutant.

    Voilà le code :

    var menu_delay = 1000;
    	
    	function temporise(id)
    	{
    		if(document.getElementById(id).style.display=="none")
    		{
    			setTimeout(function () { 
    				open(id); 
    			}, menu_delay);
    			
    		}
    		else
    		{
    			setTimeout(function () { 
    				hide(id); 
    			}, menu_delay);
    		}
    	
    	}
    	
    	function hide(id)
    	{
    		clearTimeout(id);
    		
    		Effect.Fade(id); 
    		Effect.BlindUp(id, { duration: 0.5 }); 
    	}
    	
    	function open(id)
    	{
    		clearTimeout(id);
    		
    		Effect.Appear(id); 
    		Effect.BlindDown(id, { duration: 0.4 }); 
    	}
    


    Merci d'avance :)

    ReidLos
    • Partager sur Facebook
    • Partager sur Twitter
      16 juin 2010 à 16:38:05

      Ca me parait bizarre de demander ça, mais je préfère être sûr :
      Si tu mets menu_delay à 1, il se passe quoi ?
      • Partager sur Facebook
      • Partager sur Twitter
      Directeur technique, créateur de jeux HTML5 et fan de JavaScript | La suite de OnHack est sur les rails !
        16 juin 2010 à 16:46:43

        Ca fonctionne, le menu s'ouvre tout de suite...
        • Partager sur Facebook
        • Partager sur Twitter
          16 juin 2010 à 16:59:14

          Je me disais aussi ^^
          N'oublie pas de passer le sujet en résolu
          • Partager sur Facebook
          • Partager sur Twitter
          Directeur technique, créateur de jeux HTML5 et fan de JavaScript | La suite de OnHack est sur les rails !
            16 juin 2010 à 17:03:47

            Mais ça ne résolu pas mon problème ... Lorsque je passe mon curseur sur mon li (vite fait), il va essayer de me l'ouvrir avec ou sans le settimeout a 1 secondes et faire planter mon script
            • Partager sur Facebook
            • Partager sur Twitter
              16 juin 2010 à 17:28:39

              As-tu une version à jour et stable de scriptaculous ? Est-ce qu'elle fonctionne avec ton navigateur ?
              Ca parait bête mais après, c'est scriptaculous qui prend le relai. Donc s'il y a un problème, c'est dans ses sources qu'il faut regarder, et ça risque d'être un petit plus complexe ^^
              • Partager sur Facebook
              • Partager sur Twitter
              Directeur technique, créateur de jeux HTML5 et fan de JavaScript | La suite de OnHack est sur les rails !
                16 juin 2010 à 17:32:53

                Pas de soucis pour scriptaculous ...

                C'est au niveau de mon clearTimeout() ?
                • Partager sur Facebook
                • Partager sur Twitter
                  16 juin 2010 à 19:04:13

                  A part mettre les duration à 0 ou 0,1, je ne vois pas trop
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Directeur technique, créateur de jeux HTML5 et fan de JavaScript | La suite de OnHack est sur les rails !
                    16 juin 2010 à 19:11:33

                    Citation : Shivaan

                    A part mettre les duration à 0 ou 0,1, je ne vois pas trop



                    Je vois pas a quoi ça arrangerais le soucis ...
                    • Partager sur Facebook
                    • Partager sur Twitter
                      16 juin 2010 à 19:20:02

                      Je me dit que ton soucis vient peut-être du fait que le script essaie de lancer l'animation de fermeture alors que celle de l'ouverture n'est pas encore terminée.
                      Et puis, quitte à demander de l'aide, essaie avant de te plaindre de la solution qu'on te propose ;)
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Directeur technique, créateur de jeux HTML5 et fan de JavaScript | La suite de OnHack est sur les rails !
                        16 juin 2010 à 19:38:21

                        Comme ça c'est le même soucis

                        var menu_delay_open = 800;
                        	var menu_delay_hide = 800;
                        	var duration_hide = 0.5;
                        	var duration_open = 0.3;
                        	
                        	function menu_open(id)
                        	{
                        		setTimeout(function () { 
                        			open(id); 
                        		}, menu_delay_open);
                        	}
                        	
                        	function menu_hide(id)
                        	{
                        		setTimeout(function () { 
                        			hide(id); 
                        		}, menu_delay_hide);
                        	}
                        	
                        	function hide(id)
                        	{
                        		clearTimeout(id);
                        		
                        		Effect.Fade(id); 
                        		Effect.BlindUp(id, { duration: duration_hide }); 
                        	}
                        	
                        	function open(id)
                        	{
                        		clearTimeout(id);
                        		
                        		Effect.Appear(id); 
                        		Effect.BlindDown(id, { duration: duration_open }); 
                        	}
                        


                        Citation

                        Et puis, quitte à demander de l'aide, essaie avant de te plaindre de la solution qu'on te propose ;)



                        J'ai le visuel devant moi, et constate bien le soucis. Je peux mettre simplement une alert, c'est pareil, c'est au niveau du Timeout...

                        Visiblement tu n'as pas compris ce que j'essaye de demander ... J'aimerai que mon script ne s'exécute seulement si l'utilisateur a son curseur un certain nombre de temps sur mon élément
                        • Partager sur Facebook
                        • Partager sur Twitter
                          16 juin 2010 à 20:08:18

                          Oui sauf que là, tes duration sont en 0.3 et 0.5. si tu les mets à 0, il se passe quoi ?
                          • Partager sur Facebook
                          • Partager sur Twitter
                          Directeur technique, créateur de jeux HTML5 et fan de JavaScript | La suite de OnHack est sur les rails !
                            16 juin 2010 à 20:54:57

                            c'est pour l'effet, la vitesse ... si je met en 0 ils ne s'affiche pas, normal ... c'est simplement la vitesse de l'effet
                            • Partager sur Facebook
                            • Partager sur Twitter
                              16 juin 2010 à 21:09:29

                              Je pense que dans ta fonction ou ouvre le menu déroulant.
                              Je pense que tu devrais mettre une conditions, si la souris est encors sur l'élément. Car si tu l'enlève avant, le script va vouloir dérouler le menu auquel tu as la souris dessus. Mais si tu n'as plus la souris dessus...
                              • Partager sur Facebook
                              • Partager sur Twitter
                              Mon Twitter : @Amatewasu
                                16 juin 2010 à 22:00:28

                                À première vue je trouve déjà une première erreur de script : la fonction clearTimeout n'existe pas. La fonction setTimeout programme un évenement UNE SEULE FOIS même si on peut faire une boucle. Si on veut un clearMachin il n'existe que clearInterval qui va avec setInterval. C'est pas bien clair mais bon.
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  17 juin 2010 à 3:53:21

                                  Enfaite il ne faut pas renseigner l'id pour cleartimeout mais l'identificateur du timeout, il faut donc faire passer ça dans une variable et c'est bon :)

                                  La fonction clearTimeout existe bien ! voir ici : http://www.toutjavascript.com/referenc [...] .php?iref=192
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    17 juin 2010 à 17:13:29

                                    Oui, mais setTimeout s'exécute une seule fois, il n'y a pas besoin de clearTimeout...
                                    • Partager sur Facebook
                                    • Partager sur Twitter

                                    evenement setTimeout

                                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                    • Editeur
                                    • Markdown