11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour à tout le monde Smiley biggrin ,

voilà, j'ai une fonction qui affiche une image tout en lui octroyant un effet de fondu. Le principe est que l'on repasse l'opacité de la <div> à 0 en l'incrémentant toutes les X millisecondes.

function changement1 ()
{
	var objet = document.getElementById("cadre");
	objet.style.background = "url(../images/slider/grand_" + min_1 + ".jpg) no-repeat";
	
	objet.style.opacity = 0.00;
	var opacity = 0.00;
	
	var fondu = function fondue ()
	{
		if (opacity != 1.00)
		{
			opacity = opacity + 0.05
			objet.style.opacity = opacity;
		}
		else if (opacity == 1.00)
		{
			clearTimeout(timer);
		}
	};
	
	fondu();
	var timer = setInterval(fondu, 10);
	
}


Le problème est que la fonction marche très bien la première fois, mais les fois suivantes, elle clignote ...

Cliquez sur la première image, le tournesol. La première fois tout va bien, mais après quelques clics, elle clignote bizarrement ...

En vous remerciant, et vous souhaitant un bon après-midi Smiley ravi

WIFI
Bonjour wifi_connected,

J'ai regardé rapidement ton code, il me semble que réinitialise la valeur de opacity à chaque clique, il est donc toujours différent de 1.
Le code applique donc toujours l'effet de fondu.

Essaie peut être ceci :


function changement1 () 
{ 
    var objet = document.getElementById("cadre"); 
    objet.style.background = "url(../images/slider/grand_" + min_1 + ".jpg) no-repeat"; 
     
    objet.style.opacity = 0.00; 
    var opacity = 0.00; 
     
    var fondu = function fondue () 
    { 
        if (objet.style.opacity!= 1.00) 
        { 
            opacity = opacity + 0.05 
            objet.style.opacity = opacity; 
        } 
        else
        { 
            clearTimeout(timer); 
        } 
    }; 
     
    fondu(); 
    var timer = setInterval(fondu, 10); 
     
}
Leorilan a écrit :

J'ai regardé rapidement ton code, il me semble que réinitialise la valeur de opacity à chaque clique, il est donc toujours différent de 1.
Le code applique donc toujours l'effet de fondu.
[/code]


Merci beaucoup à toi, ton code marche parfaitement Smiley biggrin

Cependant, je n'ai pas très bien saisi le fait de réinitialiser la variable à chaque fois que je clique, je pourrais avoir quelques explications stp Smiley confused

Smiley smile
Bien sur.

Dans ton code, tu mets :
var opacity = 0.00;


Tu fais un test :
if (opacity != 1.00)


Mais tu as réinitialisé la valeur de opacity à 0, donc il fait toujours la partie du code :
Il refait le "fading". D'où le clignotement.

Voilà, j'espère avoir été clair Smiley murf Smiley cligne
J'ai bien compris ce que tu veux me dire par là, merci Smiley smile

Ce qui m'intrigue c'est que quand je clique, j'initialise ma variable 'opacity' à 0. Ensuite, dans la fonction, si elle est différente de 1.00, elle s'incrémente. Mais dans la fonction, je ne la réinitialise pas pourtant, c'est pour ça que je ne vois pas trop Smiley rolleyes

Enfin, je vais peut-être comprendre avec du recul Smiley biggrin

Merci beaucoup (:
Leorilan a écrit :
En fait, ta variable opacity a une portée "globale" par rapport à ta fonction fondue().


Han ok je viens de comprendre Smiley smile

Merci beaucoup Smiley lol