Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

MENU AVEC EFFET DE FADING


Information sur la source

Catégorie :Menu & Co Niveau : Initié Date de création : 14/04/2005 Vu : 6 878

Note :
7 / 10 - par 6 personnes
7,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (8)
Ajouter un commentaire et/ou une note

Description

Les cellules du menu changent de couleur avec un effet de dégradé, la vitesse et les couleurs sont paramétrables.

 

Source

  • <html>
  • <head>
  • <STYLE type="text/css">
  • <!--
  • A
  • {
  • text-decoration:none ;
  • font-family: verdana, helvetica, sans-serif;
  • font-size: 14px;
  • }
  • A:hover { color:#F5F5DC; }
  • -->
  • </STYLE>
  • <title>menu</title>
  • <SCRIPT LANGUAGE="Jscript">
  • var backcolorfinale = "#1000DF"; // couleur de fond finale de la cellule en status ONMOUSE
  • var speedexec = 20; // vitesse du changement des couleurs
  • var echantillonage = 30; // nombre de pas du dégradé
  • var nbrBouton = 6 // nombre de bouton du menu
  • var lemenu = new Array(nbrBouton);
  • function activecouleur(kelbto, lacel)
  • {
  • acolorHEX = lacel.backgroundColor
  • lemenu[kelbto].boucle = 1
  • lemenu[kelbto].originRR = parseInt (acolorHEX.slice(1,3),16);
  • lemenu[kelbto].originGG = parseInt (acolorHEX.slice(3,5),16);
  • lemenu[kelbto].originBB = parseInt (acolorHEX.slice(5,7),16);
  • lemenu[kelbto].deltaRR = CouleurCelOn.RR - (lemenu[kelbto].originRR);
  • lemenu[kelbto].deltaGG = CouleurCelOn.GG - (lemenu[kelbto].originGG);
  • lemenu[kelbto].deltaBB = CouleurCelOn.BB - (lemenu[kelbto].originBB);
  • fadingcolorOn(kelbto,lacel);
  • }
  • function retourcouleur(kelbto, lacel)
  • {
  • if (timer)
  • {
  • clearTimeout(setTimerOn)
  • }
  • rcolorHEX = lacel.backgroundColor
  • lemenu[kelbto].boucle = 1
  • lemenu[kelbto].originRR = parseInt (rcolorHEX.slice(1,3),16);
  • lemenu[kelbto].originGG = parseInt (rcolorHEX.slice(3,5),16);
  • lemenu[kelbto].originBB = parseInt (rcolorHEX.slice(5,7),16);
  • lemenu[kelbto].deltaRR = CouleurCelOut.RR - (lemenu[kelbto].originRR);
  • lemenu[kelbto].deltaGG = CouleurCelOut.GG - (lemenu[kelbto].originGG);
  • lemenu[kelbto].deltaBB = CouleurCelOut.BB - (lemenu[kelbto].originBB);
  • fadingcolorOff(kelbto,lacel);
  • }
  • function fadingcolorOn (kelbto, cel_tmp)
  • {
  • timer = true
  • if (lemenu[kelbto].boucle == (echantillonage+1))
  • {
  • return false
  • }
  • else
  • {
  • var RR = echantillon_HEX(lemenu[kelbto].boucle, lemenu[kelbto].originRR, lemenu[kelbto].deltaRR)
  • var GG = echantillon_HEX(lemenu[kelbto].boucle, lemenu[kelbto].originGG, lemenu[kelbto].deltaGG)
  • var BB = echantillon_HEX(lemenu[kelbto].boucle, lemenu[kelbto].originBB, lemenu[kelbto].deltaBB)
  • cel_tmp.backgroundColor = "#"+RR+GG+BB;
  • lemenu[kelbto].boucle = lemenu[kelbto].boucle+1
  • Onbouton = kelbto
  • Oncel = cel_tmp
  • setTimerOn = setTimeout("fadingcolorOn(Onbouton, Oncel)", speedexec)
  • }
  • }
  • function fadingcolorOff (kelbto, cel_tmp)
  • {
  • timer = false
  • if (lemenu[kelbto].boucle == (echantillonage+1))
  • {
  • return false
  • }
  • else
  • {
  • var RR = echantillon_HEX(lemenu[kelbto].boucle, lemenu[kelbto].originRR, lemenu[kelbto].deltaRR)
  • var GG = echantillon_HEX(lemenu[kelbto].boucle, lemenu[kelbto].originGG, lemenu[kelbto].deltaGG)
  • var BB = echantillon_HEX(lemenu[kelbto].boucle, lemenu[kelbto].originBB, lemenu[kelbto].deltaBB)
  • cel_tmp.backgroundColor = "#"+RR+GG+BB;
  • lemenu[kelbto].boucle = lemenu[kelbto].boucle+1
  • Offbouton = kelbto
  • Offcel = cel_tmp
  • setTimerOff = setTimeout("fadingcolorOff(Offbouton, Offcel)", speedexec)
  • }
  • }
  • function echantillon_HEX(boucle_tmp, origine, ledelta)
  • {
  • var tempo
  • tempo = Math.round(origine + ((boucle_tmp/echantillonage)*ledelta))
  • tempo = tempo.toString(16)
  • if (tempo.length < 2)
  • {
  • tempo = "0"+tempo;
  • }
  • return tempo
  • }
  • function CouleurParse(tempo)
  • {
  • this.RR = parseInt (tempo.slice(1,3),16);
  • this.GG = parseInt (tempo.slice(3,5),16);
  • this.BB = parseInt (tempo.slice(5,7),16);
  • }
  • function Init_general(cel_or)
  • {
  • timer = false
  • CouleurCelOn = new CouleurParse(backcolorfinale);
  • CouleurCelOut = new CouleurParse(cel_or);
  • for (var i = 0; i < nbrBouton ; i++)
  • {
  • lemenu[i] = new Obj_Bouton(1, 0, 0, 0, 0, 0, 0)
  • }
  • }
  • function Obj_Bouton(boucle, deltaRR, deltaGG, deltaBB, originRR, originGG, originBB)
  • {
  • this.boucle = boucle
  • this.deltaRR = deltaRR
  • this.deltaGG = deltaGG
  • this.deltaBB = deltaBB
  • this.originRR = originRR
  • this.originGG = originGG
  • this.originBB = originBB
  • }
  • </SCRIPT>
  • </head>
  • <body bgcolor="#EEEEEE" topmargin="0" leftmargin="0" link="#0000FF" vlink="#0000FF" alink="#0000FF" onload="Init_general('#EEFFFF');">
  • <center> <table border="1" cellpadding="0" cellspacing="0" style="border-style:Solid; border-width:2; border-collapse: collapse;" bordercolor="#111111" width="95%">
  • <tr>
  • <td width="11%" style="background-color:'#EEFFFF';" id="bto_menu0">&nbsp;<a href="#" onmouseover="activecouleur(0, bto_menu0.style);" onmouseout="retourcouleur(0, bto_menu0.style);">menu 0</a></td>
  • <td width="11%" style="background-color:'#EEFFFF';" id="bto_menu1">&nbsp;<a href="#" onmouseover="activecouleur(1, bto_menu1.style);" onmouseout="retourcouleur(1, bto_menu1.style);">menu 1</a></td>
  • <td width="11%" style="background-color:'#EEFFFF';" id="bto_menu2">&nbsp;<a href="#" onmouseover="activecouleur(2, bto_menu2.style);" onmouseout="retourcouleur(2, bto_menu2.style);">menu 2</a></td>
  • <td width="11%" style="background-color:'#EEFFFF';" id="bto_menu3">&nbsp;<a href="#" onmouseover="activecouleur(3, bto_menu3.style);" onmouseout="retourcouleur(3, bto_menu3.style);">menu 3</a></td>
  • <td width="11%" style="background-color:'#EEFFFF';" id="bto_menu4">&nbsp;<a href="#" onmouseover="activecouleur(4, bto_menu4.style);" onmouseout="retourcouleur(4, bto_menu4.style);">menu 4</a></td>
  • <td width="11%" style="background-color:'#EEFFFF';" id="bto_menu5">&nbsp;<a href="#" onmouseover="activecouleur(5, bto_menu5.style);" onmouseout="retourcouleur(5, bto_menu5.style);">menu 5</a></td>
  • </tr></table></center>
  • </body>
  • </html>
<html>
<head>
<STYLE type="text/css">
<!--
A 
{
	text-decoration:none ;
	font-family: verdana, helvetica, sans-serif;
	font-size: 14px;
}
A:hover { color:#F5F5DC; }
-->
</STYLE>
<title>menu</title>
<SCRIPT LANGUAGE="Jscript">

var backcolorfinale = "#1000DF";	// couleur de fond finale de la cellule en status ONMOUSE 
var speedexec = 20;			// vitesse du changement des couleurs
var echantillonage = 30;		// nombre de pas du dégradé
var nbrBouton = 6				// nombre de bouton du menu

var lemenu = new Array(nbrBouton);

function activecouleur(kelbto, lacel)
{
	acolorHEX = lacel.backgroundColor
	lemenu[kelbto].boucle = 1 
	lemenu[kelbto].originRR = parseInt (acolorHEX.slice(1,3),16);
	lemenu[kelbto].originGG = parseInt (acolorHEX.slice(3,5),16);
	lemenu[kelbto].originBB = parseInt (acolorHEX.slice(5,7),16);
	lemenu[kelbto].deltaRR = CouleurCelOn.RR - (lemenu[kelbto].originRR);
	lemenu[kelbto].deltaGG = CouleurCelOn.GG - (lemenu[kelbto].originGG);
	lemenu[kelbto].deltaBB = CouleurCelOn.BB - (lemenu[kelbto].originBB);
	fadingcolorOn(kelbto,lacel);	
}
	
function retourcouleur(kelbto, lacel)
{
	if (timer)
	{
		clearTimeout(setTimerOn)
	}
	rcolorHEX = lacel.backgroundColor
	lemenu[kelbto].boucle = 1 
	lemenu[kelbto].originRR = parseInt (rcolorHEX.slice(1,3),16);
	lemenu[kelbto].originGG = parseInt (rcolorHEX.slice(3,5),16);
	lemenu[kelbto].originBB = parseInt (rcolorHEX.slice(5,7),16);
	lemenu[kelbto].deltaRR = CouleurCelOut.RR - (lemenu[kelbto].originRR);
	lemenu[kelbto].deltaGG = CouleurCelOut.GG - (lemenu[kelbto].originGG);
	lemenu[kelbto].deltaBB = CouleurCelOut.BB - (lemenu[kelbto].originBB);
	fadingcolorOff(kelbto,lacel);	
}

function fadingcolorOn (kelbto, cel_tmp)
{
	timer = true
	if (lemenu[kelbto].boucle == (echantillonage+1))
	{
		return false
	}
	else
	{
		var RR = echantillon_HEX(lemenu[kelbto].boucle, lemenu[kelbto].originRR, lemenu[kelbto].deltaRR)
		var GG = echantillon_HEX(lemenu[kelbto].boucle, lemenu[kelbto].originGG, lemenu[kelbto].deltaGG)
		var BB = echantillon_HEX(lemenu[kelbto].boucle, lemenu[kelbto].originBB, lemenu[kelbto].deltaBB)
	cel_tmp.backgroundColor = "#"+RR+GG+BB;
	lemenu[kelbto].boucle = lemenu[kelbto].boucle+1
	Onbouton = kelbto
	Oncel = cel_tmp
	setTimerOn = setTimeout("fadingcolorOn(Onbouton, Oncel)", speedexec)
	}
}
function fadingcolorOff (kelbto, cel_tmp)
{
	timer = false
	if (lemenu[kelbto].boucle == (echantillonage+1))
	{
		return false
	}
	else
	{
		var RR = echantillon_HEX(lemenu[kelbto].boucle, lemenu[kelbto].originRR, lemenu[kelbto].deltaRR)
		var GG = echantillon_HEX(lemenu[kelbto].boucle, lemenu[kelbto].originGG, lemenu[kelbto].deltaGG)
		var BB = echantillon_HEX(lemenu[kelbto].boucle, lemenu[kelbto].originBB, lemenu[kelbto].deltaBB)
	cel_tmp.backgroundColor = "#"+RR+GG+BB;
	lemenu[kelbto].boucle = lemenu[kelbto].boucle+1
	Offbouton = kelbto
	Offcel = cel_tmp
	setTimerOff = setTimeout("fadingcolorOff(Offbouton, Offcel)", speedexec)
	}
}
function echantillon_HEX(boucle_tmp, origine, ledelta)
{
	var tempo
	tempo = Math.round(origine + ((boucle_tmp/echantillonage)*ledelta))
	tempo = tempo.toString(16)
	if (tempo.length < 2)
	{
		tempo = "0"+tempo;
	}
	return tempo	
}

function CouleurParse(tempo)
{
	this.RR = parseInt (tempo.slice(1,3),16);
	this.GG = parseInt (tempo.slice(3,5),16);
	this.BB = parseInt (tempo.slice(5,7),16);
}
function Init_general(cel_or)
{
	timer = false
	CouleurCelOn = new CouleurParse(backcolorfinale);
	CouleurCelOut = new CouleurParse(cel_or);
	for (var i = 0; i < nbrBouton ; i++)
	{
		lemenu[i] = new Obj_Bouton(1, 0, 0, 0, 0, 0, 0)
	}
}
function Obj_Bouton(boucle, deltaRR, deltaGG, deltaBB, originRR, originGG, originBB)
{
	this.boucle = boucle
	this.deltaRR = deltaRR
	this.deltaGG = deltaGG
	this.deltaBB = deltaBB  
	this.originRR = originRR
	this.originGG = originGG
	this.originBB = originBB
}


</SCRIPT>
</head>
<body bgcolor="#EEEEEE" topmargin="0" leftmargin="0" link="#0000FF" vlink="#0000FF" alink="#0000FF" onload="Init_general('#EEFFFF');">
   <center> <table border="1" cellpadding="0" cellspacing="0" style="border-style:Solid; border-width:2; border-collapse: collapse;" bordercolor="#111111" width="95%">
      <tr>
<td width="11%" style="background-color:'#EEFFFF';" id="bto_menu0">&nbsp;<a href="#" onmouseover="activecouleur(0, bto_menu0.style);" onmouseout="retourcouleur(0, bto_menu0.style);">menu 0</a></td>
<td width="11%" style="background-color:'#EEFFFF';" id="bto_menu1">&nbsp;<a href="#" onmouseover="activecouleur(1, bto_menu1.style);" onmouseout="retourcouleur(1, bto_menu1.style);">menu 1</a></td>
<td width="11%" style="background-color:'#EEFFFF';" id="bto_menu2">&nbsp;<a href="#" onmouseover="activecouleur(2, bto_menu2.style);" onmouseout="retourcouleur(2, bto_menu2.style);">menu 2</a></td>
<td width="11%" style="background-color:'#EEFFFF';" id="bto_menu3">&nbsp;<a href="#" onmouseover="activecouleur(3, bto_menu3.style);" onmouseout="retourcouleur(3, bto_menu3.style);">menu 3</a></td>
<td width="11%" style="background-color:'#EEFFFF';" id="bto_menu4">&nbsp;<a href="#" onmouseover="activecouleur(4, bto_menu4.style);" onmouseout="retourcouleur(4, bto_menu4.style);">menu 4</a></td>
<td width="11%" style="background-color:'#EEFFFF';" id="bto_menu5">&nbsp;<a href="#" onmouseover="activecouleur(5, bto_menu5.style);" onmouseout="retourcouleur(5, bto_menu5.style);">menu 5</a></td>
</tr></table></center>
</body>
</html>

Conclusion

Seul problème ne pas aller trop vite avec le pointage de la souris car les cellules ne se remettent pas tout le temps à la couleur d'origine. Problème avec la fonction setTimeout je pense. Si quelqu'un à une suggestion car je ne vois pas comment m'en sortir!!
 

Commentaires et avis

signaler à un administrateur
Commentaire de Romain128 le 14/04/2005 17:53:34

Il marche pas sous Gecko, mais marche sur IE. Come tu l'a dis, les cellules se bloquent parfois...
7/10.

signaler à un administrateur
Commentaire de Arto_8000 le 15/04/2005 01:49:45

L'idée est bonne et l'effet super,mais avec quelque problème. 8/10.

signaler à un administrateur
Commentaire de volnay le 15/04/2005 09:46:04

Merci pour vos commentaires. Pour les autres browser, effectivement j'ai regardé que pour IE.
Pour le Bug: ça bloque si on demande en même temps à deux cellules de revenir à la couleur d'origine. Une solution serait de faire une fonction pour chaque bouton mais c'est pas trés elegant et factorisé. J'ai l'impression que les SetTimeout ne s'empilent pas comme il le faudrait, ou un probleme de scope de variable?  

signaler à un administrateur
Commentaire de jjdagadir le 15/04/2005 12:38:41

Ouais, c'est beaucoup de code, du boulot, du temps...
c'est bien d'essayer et çà marche, mais, mais pourquoi compliquer ce qui pourrait être simple avec deux ou trois lignes de CSS ? Aller, je note pas car entre l'encouragement et le découragement j'arrive pas à choisir.
Continue à coder quand même.
Kenavo

signaler à un administrateur
Commentaire de Gorrk le 15/04/2005 15:02:14

Salut, j'ai pas trop regarder, mais un petit width:100% dans le css ca rendrait tout de suite un peu mieux.

signaler à un administrateur
Commentaire de catloup le 18/04/2005 22:39:24

sa ne marche pas

signaler à un administrateur
Commentaire de volnay le 19/04/2005 09:50:03

réponse à catloup : lit les posts + haut, je l'ai testé pour IE5.5 et + ;
réponse à jjdagadir : je suis intéressé par tes 3 lignes de css qui font pareil
Salut

signaler à un administrateur
Commentaire de SiZiOUS le 04/02/2006 23:27:33

Je ne pense pas qu'un dégradé soit possible en CSS. Ou peut être avec une propriété que je ne connais pas.

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,250 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.