Partage
  • Partager sur Facebook
  • Partager sur Twitter

Correction script affiche/cache_image

Sujet résolu
    22 avril 2009 à 10:55:12

    Bonjour, j'ai un problème avec un script
    j'ai fait ca :
    function affiche(){
      var images = document.getElementById("images").getElementsByTagName("span");
      for(var i=0,l=images.length;i<l;i++){
        setTimeout(affiche_image(images[i].style),10);
      }
    }
    function cache(){
      var images = document.getElementById("images").getElementsByTagName("span");
      for(var i=0,l=images.length;i<l;i++){
        setTimeout(cache_image(images[i].style),10);
      }
    }
    
    function affiche_image(obj){
    	obj.visibility = "visible";
    }
    function cache_image(obj){
    	obj.visibility = "hidden";
    }
    


    mon html :
    <div id="images">
    <p align ="center">
    	<span class = "img"><img  src ="images/plan.jpg" width=200px/></span><br/>
    	<span class ="img1"><img  src ="images/digicode.jpg" width=200px/></span>
    	<a href="index.html">
    		<img src="images/logoopt.gif" 
    		onMouseOver="this.src='images/logoopt.gif'; affiche();"
    		onMouseOut="this.src='images/logonoir.gif'; cache();" height=300px></img>
            </a>
    	<span class = "img1"><img  src ="images/logosimple.gif" width=200px/></span><br/>
    	<span class = "img"><img src ="images/digicode.jpg" width=200px/></span>
    </p>
    


    J'aimerai que les images deviennent visibles une à une lorsque la souris passe sur le lien. Actuellement, seule la première image sur les 4 s'affiche et s'efface lors du passage de la souris, les autre restent invisibles. Si vous voyez mon erreur n'hésitez pas ^^
    • Partager sur Facebook
    • Partager sur Twitter
      22 avril 2009 à 11:37:53

      var images;
      var taille;
      
      function affiche() {
      
        images = document.getElementById("images").getElementsByTagName("span");
      	taille = images.length;
      	
        afficheRecursif(0);
      }
      
      function afficheRecursif(index) {
      
      	if ( index < taille ) {
      	
      		affiche_image(images[index].style);
      		setTimeout("afficheRecursif("+index+"+1)", 200);
      	}
      }
      
      function cache() {
      
        images = document.getElementById("images").getElementsByTagName("span");
        taille = images.length;
      	
        cacheRecursif(0);
      }
      
      function cacheRecursif(index) {
      
      	if ( index < taille ) {
      	
      		cache_image(images[index].style);
      		setTimeout("cacheRecursif("+index+"+1)", 200);
      	}
      }
      
      function affiche_image(obj) {
      
      	obj.visibility = "visible";
      }
      function cache_image(obj) {
      
      	obj.visibility = "hidden";
      }
      
      • Partager sur Facebook
      • Partager sur Twitter
        22 avril 2009 à 12:10:13

        Merci ca marche. C'est un peu plus compliqué mais c'est bien.
        • Partager sur Facebook
        • Partager sur Twitter
          22 avril 2009 à 12:20:32

          Ca ne peut pas se résoudre simplement avec des closures dans les setTimeout() ?

          function affiche(){
            var images = document.getElementById("images").getElementsByTagName("span");
            for(var i=0,l=images.length;i<l;i++){
              setTimeout((function(i){
                return function() {
                  affiche_image(images[i].style);
                };
              })(i),10);
            }
          }
          function cache(){
            var images = document.getElementById("images").getElementsByTagName("span");
            for(var i=0,l=images.length;i<l;i++){
              setTimeout((function(i){
          	  return function() {
          	    cache_image(images[i].style);
          	  };
          	})(i),10);
            }
          }
          
          function affiche_image(obj){
          	obj.visibility = "visible";
          }
          function cache_image(obj){
          	obj.visibility = "hidden";
          }
          


          Parce que si oui, c'est quand même moins fouilli que ta méthode, loacast...
          • Partager sur Facebook
          • Partager sur Twitter
            22 avril 2009 à 12:39:23

            Avec ta méthode golmote les 4 images s'affichent en même temps
            • Partager sur Facebook
            • Partager sur Twitter
              22 avril 2009 à 13:14:02

              function affiche(){
                var images = document.getElementById("images").getElementsByTagName("span");
                for(var i=0,l=images.length;i<l;i++){
                  setTimeout((function(i){
                    return function() {
                      affiche_image(images[i].style);
                    };
                  })(i),200*i);
                }
              }
              function cache(){
                var images = document.getElementById("images").getElementsByTagName("span");
                for(var i=0,l=images.length;i<l;i++){
                  setTimeout((function(i){
              	  return function() {
              	    cache_image(images[i].style);
              	  };
              	})(i),200*i);
                }
              }
              
              function affiche_image(obj){
              	obj.visibility = "visible";
              }
              function cache_image(obj){
              	obj.visibility = "hidden";
              }
              


              Sa méthode est bien il suffisait de rajouter *i au temps du setTimeout.

              Citation : golmote

              Parce que si oui, c'est quand même moins fouilli que ta méthode, loacast...



              Fouilli, carrément. Je n'arrivais pas à faire fonctionner le setTimeout autrement qu'avec une fonction récursive :D.
              • Partager sur Facebook
              • Partager sur Twitter
                22 avril 2009 à 13:52:09

                Exact, j'avais oublié que tu voulais un décalé. ^^

                loacast, les closures, c'est magique :)
                (Et c'est le cas classique où elles sont nécessaires : l'appel d'un setTimeout dans une boucle, où la fonction appelée prend en paramètre la variable de la boucle ^^ )
                • Partager sur Facebook
                • Partager sur Twitter
                  22 avril 2009 à 13:59:59

                  Ben merci beaucoup pour vos réponses.
                  • Partager sur Facebook
                  • Partager sur Twitter

                  Correction script affiche/cache_image

                  × 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