Javascript setInterval probleme avec "this&qu

Fermé
Grew Messages postés 14 Date d'inscription jeudi 28 septembre 2006 Statut Membre Dernière intervention 19 janvier 2009 - 22 déc. 2008 à 00:01
Grew Messages postés 14 Date d'inscription jeudi 28 septembre 2006 Statut Membre Dernière intervention 19 janvier 2009 - 22 déc. 2008 à 13:34
Bonjour,
J'essai de faire un petit script qui effectue un fade de couleur sur le fond d'un div lors du passage de la souris.

Voici mon code:

        var mestds=document.getElementsByTagName('td');
	val= 0;
	
	
	
	function degrade(val,zis)
	{
	if(zis==null){zis=this}
		newVal = val + 1;
		if(newVal <= 255)
		{

			zis.style.backgroundColor="rgb(200,200,"+newVal+")"
			var timer = setInterval('degrade(newVal,zis);', 40);
		}
		else
		{
		clearInterval(timer);
		newVal = 500;
		} 
	}
	
	
	for(i=0; i<mestds.length ; i++)
	{
		mestds[i].onmouseover=degrade(val,zis)
	}
	


Le problème est au niveau du "zis.style.backgroundColor="rgb(200,200,"+newVal+")" ", la console d'erreur me dit que zis.style est not defined.

Pourtant, ce code marche:

        function fade_color()
	{
		
		this.style.backgroundColor='rgb(200,200,30)'
	}	

        for(i=0; i<mestds.length ; i++)
	{
		mestds[i].onmouseover=fade_color
	}


Pouriez vous m'expliquer ou est mon erreur?
Merci d'avance pour votre aide.

1 réponse

Grew Messages postés 14 Date d'inscription jeudi 28 septembre 2006 Statut Membre Dernière intervention 19 janvier 2009 3
22 déc. 2008 à 13:34
Deuxieme petit probleme du même type, j'ai essayé de faire le même programme mais sans utiliser le this, alors ça donne ça:

       function lance()
	{
		val=255
		test()
	}
	
	function test()
	{		
		var timer = setInterval("if(val >=0) { div1.style.backgroundColor='rgb(255,255,'+val+')'; val-=1; }else{ clearInterval(timer);} div1.innerHTML=val; ", 1);
	}	
	
	div1.onmouseover=lance


Quand mon curseur passe sur la div1, le fade se fait bien, mais lorceque je repasse une deuxieme fois le curseur sur le div1, le fade se fait mais deux fois plus rapidement que la premiere fois, idem pr la troisième fois, etc..
Je pense que c'est un probleme avec le cleearInterval(), ai-je raison? que dois-je faire pour réparer ce probleme?