Partage
  • Partager sur Facebook
  • Partager sur Twitter

Estomper une image en javascript

comment faire ?

Sujet résolu
    3 octobre 2009 à 23:06:24

    Bonjour à tous et à toutes ;)

    Je voudrais savoir comment faire pour qu'une image apparaît en fondu opacité : 1%, 2%...99%, 100%.
    Je veux qu'à la fin, j'aie juste à faire ceci :

    <script type="text/javascript">
        OuvertureEstomper(IdDeLaPhoto, TempsEnSeconde);
    </script>
    


    J'ai donc essayer ceci :

    var OuvertureEstomperVariable = 0; //Va nous permettre de faire progresser l'opacité
    function OuvertureEstomper(Photo, TempsAnimation){
    
    	var photo = document.getElementById(Photo);// on prend l'objet en question et on le met dans une variable
    	var tempsAnimation = TempsAnimation * 1000; //pour avoir la durée de l'animation en milliseconde
    	var tempsParOpacité = tempsAnimation/100; //pour avoir le delai entre chaque niveau de transparence (il y en a 100 à faire : 1%, 2%...)
    
    	photo.style.opacity = OuvertureEstomperVariable/100;// on change l'opacité de la photo
    	OuvertureEstomperVariable++;//on ajoute 1 à cette variable : la prochaine fois, on va pouvoir s'en servir pour augmenter de 1% la transparence
    
    	if(OuvertureEstomperVariable < 100) //on recommence tant qu'on a pas fait les 100%
    		setTimeout("OuvertureEstomper()", TempsAnimation);
    	else{// une fois l'animation fini, on supprime la variable qui était hors de la fonction
    		delete OuvertureEstomperVariable;
    	}
    }
    


    Tout fonctionne bien. Le problème arrive lorsqu'on recommence la fonction : les paramètres ne sont plus définis !

    J'ai tout simplement fait ceci pour régler le problème :
    setInterval(function(){
        var i = 0;
        if(i < 100)
        OuvertureEstomper("photo");
        i++;
    }, 100);
    


    Mais bon, je veux devoir écrire un minimum de code pour simplifier l'utilisation ;)
    (il est bien sur ici que j'ai arrangé le script d'estompement en conséquence ^^ )

    Merci et bonne journée :soleil:
    • Partager sur Facebook
    • Partager sur Twitter
      4 octobre 2009 à 11:30:45

      J'ai pas tout suivi, mais je ferais :

      function OuvertureEstomper(id, tempsAnimation, i){
      	if (!i) {
      		var i = 0;
      	}
      	
      	var photo = document.getElementById(id);
      	var tempsParOpacite = tempsAnimation / 100;
      	
      	photo.style.opacity = i / 100;
      	i++;
      	
      	if (i <= 100) {
      		setTimeout(function() {
      			OuvertureEstomper(id, tempsAnimation, i);
      		}, tempsParOpacite);
      	}
      }
      
      OuvertureEstomper('photo1', 3000);
      



      Ps: Je te déconseille d'utiliser les mêmes noms de variable avec juste une majuscule qui diffère, prends des noms bien différents
      • Partager sur Facebook
      • Partager sur Twitter
        4 octobre 2009 à 16:01:33

        Les navigateurs ne gèrent pas tous l'opacité avec la même propriété CSS.
        http://www.siteduzero.com/forum-83-448 [...] html#r4221789

        @Tiller : S'il utilise un i global, ton truc merde :p
        Et je pense qu'avec une closure, tu peux améliorer un peu...
        (genre éviter de refaire document.getElementById à chaque loop entre autres :p )

        Et je signale aux deux que les noms de variables commençant par une majuscule, c'est pour les constructeurs :-°

        Encore un dernier truc :
        si je me souviens bien, IE gère que de 0 à 1 avec que les dixièmes de changeable pour l'opacité... Bref, tu peux faire que 10 loops je crois...
        à vérifier ça.
        • Partager sur Facebook
        • Partager sur Twitter
          4 octobre 2009 à 16:11:48

          Citation : xavierm02

          Et je signale aux deux que les noms de variables commençant par une majuscule, c'est pour les constructeurs :-°



          Je commence jamais avec des majs =°
          J'ai juste repris son code.
          • Partager sur Facebook
          • Partager sur Twitter
            4 octobre 2009 à 16:48:25

            Bonjour et merci des réponses ;)
            Oui en effet je suis d'accord avec vous : la majuscule est pour les constructeurs. Ceci étant dit, je code rarement en javascript d'où la présence d'un code pas super propre et de quelques erreurs comme celle cité au-dessus :-°

            ÉDIT :

            Merci ça fonctionne à merveille, juste une petite question

            Pourquoi lorsque j'écris "OuvertureEstomper("photo", 3);" il fait référence à la fonction "OuvertureEstomper(id, dureeAnimationS, i);" ?


            Merci et bonne journée :soleil:

            • Partager sur Facebook
            • Partager sur Twitter
              4 octobre 2009 à 18:19:39

              Et il faut référence à ça parce que c'est ce que le script lui dit de faire...
              • Partager sur Facebook
              • Partager sur Twitter
                4 octobre 2009 à 18:22:03

                Ben je veux dire pourquoi est-ce qu'il fait référence à une fonction dont cette fonction a un paramètre de plus ( i ) et que quand on appelle la fonction, on envoie pas de 3e paramètre :o
                Ce n'est pas comme la surcharge de méthode en C :euh:
                • Partager sur Facebook
                • Partager sur Twitter
                  4 octobre 2009 à 18:25:35

                  Si tu t'y connais en php, c'est l'équivalent de :

                  function ($truc, $machin, $chose = false) {

                  Coté php, les deux premiers sont obligatoires, le dernier non.

                  Et en fait en JS, les arguments sont tous optionnel, et si ils ne sont pas transmis, la variable vaut undefined.

                  Et comme tu peux le voir, dans mon code, juste après je fais une vérification pour voir si i existe.

                  C'était juste histoire d'avoir une argument en moins a écrire au premier appel.
                  • Partager sur Facebook
                  • Partager sur Twitter

                  Estomper une image en javascript

                  × 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