11540 sujets

JavaScript, DOM et API Web HTML5

Hello à tous.

Voilà, je voudrais réaliser un effet de fondu de la couleur de fond du noir au blanc et inversement selon les pages de mon site.

J'ai récupéré un script qui fait ça très bien (gloire à son auteur !) mais je ne comprends pas bien pourquoi, il ne marche pas sous Firefox, alors qu'il fonctionne parfaitement sous IE, Opera et Chrome.

C'est sûrement tout bête, mais comme je débute, je ne vois pas où se trouve le problème.
Quand je teste le script tel quel, ça fonctionne, mais dès que je l'insère dans une page (basique), ça ne fonctionne plus. Je suppose que je le place au mauvais endroit, mais où dois-je le mettre alors ? J'ai tenté aussi de le mettre dans un fichier .js à part et de l'appeler, rien n'y fait. Si quelqu'un pouvait m'aider, je lui en serais extrêmement reconnaissant...

Voici le code : (je laisse les commentaires de l'auteur, si ça peut aider)


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Titre de la page</title>
</head>

<body>
<script type="text/javascript">

/*Configuration */

config=new Array();

/*Cette option change le nombre de couleurs qui seront traversées 
  dans le dégradé. Le nombre de couleurs qui passeront dans le dégradé
  sera 255/config["intervalle_couleurs"]. Si tu mets 1, 255 couleurs passeront, 
  si tu mets 2, 127 couleurs passeront etc.... Plus il y a de couleurs
  et plus ce sera fluide mais lent. Par défaut je mets 2: un bon compromis */

config["intervalle_couleurs"] = 2;

/* Cette option règle l'intervalle de temps (em millisecondes) entre 
   chaque changement de couleur de l'arrière plan. Par défaut: 10 */

config["intervalle_temps"] = 10;

/* Début du script */


couleur=0;
intervalle_couleurs=0;


/* Configure l'intervalle de couleur. Si config["intervalle_couleurs"] est à 1,
   alors la couleur sera incrémentée de 0x010101 àchaque dégradé. 
   Si config["intervalle_couleurs"] est à 2, alors la couleur sera 
   incrémentée de 0x020202 à chaque dégradé. */
function configure()
{
	intervalle_couleurs = config["intervalle_couleurs"] + (config["intervalle_couleurs"] << 8) + (config["intervalle_couleurs"] << 16);

}

/* document.bgColor doit prendre une valeur hexa sous forme de chaine 
   de caractère avec 6 chiffres hexa. Si notre couleur comprend moins de 6
   chiffres, on rajoute des zero devant */
function padding(nombre)
{
	
	padded_str="";
	nombre=nombre.toString(16);
	if(nombre.length < 6){
		for (i=0;i< (6-nombre.length);i++)
		{
			padded_str+="0";
		}
		padded_str+=nombre;
	}
	else{
		padded_str=nombre;
	}
	return padded_str;
}

// Le dégradé
function degrade()
{
	document.bgColor=padding(couleur);
	if (couleur < 0xffffff){
		setTimeout("degrade()",config["intervalle_temps"]);
	}
	// N'allons pas trop loin dans l'incrémentation
	if ( (couleur + intervalle_couleurs) >= 0xffffff){
		couleur = 0xffffff;
	}
	else{
		couleur+=intervalle_couleurs;
	}
	
}
configure();
degrade();
</script>

</body>
</html>


merci d'avance
Vinny
Modifié par vinny38 (27 Jan 2010 - 10:59)
Hello

Bon eh bien finalement je me suis orienté vers une autre solution pour créer mon effet de fondu, à savoir jQuery.

  <script src="http://code.jquery.com/jquery-latest.js"></script>
  <script src="http://jqueryui.com/latest/ui/effects.core.js"></script>
  <script type="text/javascript">
     $(document).ready(function(){
     $("body").append(function() {
       $(this).animate({ backgroundColor: "black" }, 1000);
       });
     });
  </script>


Ca fonctionne bien mais... voila...

Mon but est le suivant : Sur mon site web, la couleur d'arrière-plan par défaut doit être le blanc. SAUF pour quelques pages que j'aimerais avoir en noir. L'idée est donc de faire une transition entre les pages à fond blanc (et inversement) et celles à fond noir pas trop violente.

L'effet jQuery ci-dessus est parfait mais mon nouveau problème est le suivant : comment faire en sorte que, lorsqu'on sort de la page "à fond noir" pour aller vers une page "à fond blanc", l'effet s'inverse.

En d'autres termes, je souhaiterais pouvoir écrire un script qui dise : Smiley sweatdrop
- "Si backgroundColor est "black" et que j'ouvre une des pages "a", "b" ou "c", alors exécuter script x" (les pages a, b ou c auront un fond blanc, vous l'aurez compris)
- "Si backgroundColor est "white" et que j'ouvre une des pages "d", "e" ou "f", alors exécuter script y" (l'inverse, bien sûr)
- "Sinon, ben... rien"

Je ne sais pas si je me fais bien comprendre... J'espère...

Quelqu'un pourrait-il me donner quelques pistes de réflexion sur ce problème ?
Merci d'avance

ps : mon titre original n'a plus grand chose à voir avec ce topic... désolé...
Un cookie ? ou en fonction de la taille de ton site jouer avec la variable "document.referrer" et en incluant dans tes url une indications sur la couleur utilisée par la page quittée et à venir
Hello

Merci pour ta réponse rs459.
Mais un cookie ? Je ne vois pas trop bien l'idée... de plus je pense que de nombreux utilisateurs bloquent ces cookies alors...
La variable "document.referrer" ? Pourquoi pas, il y a peut être une piste mais là encore je ne vois pas bien comment l'utiliser pour arriver à mes fins... Il faudrait, j'imagine, aller "récupérer" l'info de la couleur du background dans la page précédente en utilisant cette variable puis utiliser cette info pour lancer tel ou tel script. Mais je ne vois pas trop comment faire...

A l'heure actuelle, je suis toujours à réfléchir autour des solutions apportées par jQuery.
On m'a soufflé une ébauche de script, mais qui ne fonctionne qu'avec IE, autrement dit, qui ne fonctionne pas vraiment... Smiley cligne

Voici mon code en l'état...

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Titre de la page</title>

  <script type="text/javascript" src="jquery-1.4.1.js"></script>	
  <script type="text/javascript" src="effects.core.js" ></script>

  <script type="text/javascript">
  $(document).ready(function(){
  $("body").append(function() {
		if($(this).css("background-color") == "black") {
			$(this).animate({ backgroundColor: "white" }, 1000);
		} else if($(this).css("background-color") == "white"){
			$(this).animate({ backgroundColor: "black" }, 1000);
		} else {
			$(this).css("background-color", "white");
		}
    });
  });
  </script>

    
</head>

<body>
<p><a href="test-2.php" class="texte">Voyons voir si ça marche dans l'autre sens</a></p>
</body>
</html>


Je m'arrache les cheveux...
J'ai l'affreuse impression que la solution est simple comme bonjour...
J'en appelle aux âmes charitables...

merci d'avance
vinny
Abandonnes l'idée du document.referrer c'est bancal comme solution de toute facon.

tu dois passer par une variable de session , php , ou un cookie, pour passer l'information d'une page à l'autre il n'y a que ca comme solution.

$(document).ready(function(){ 
  $("body").append(function() { 
        if($(this).css("background-color") == "black") { 
            $(this).animate({ backgroundColor: "white" }, 1000); 
        } else if($(this).css("background-color") == "white"){ 
            $(this).animate({ backgroundColor: "black" }, 1000); 
        } else { 
            $(this).css("background-color", "white"); 
        } 
    }); 
  });  


ne peut pas fonctionner puisque ca récupèrera la valeur du background sur la page actuelle pas la précédente.

Donc l'idée c'est :

Si aucun cookie n'existe, alors afficher la page sans transition, créer un cookie qui enregistre la couleur du background de la page.

Si un cookie existe , alors récupérer la valeur couleur, la comparer avec la valeur de la page actuelle , si identique ne rien faire , si diffèrent déclencher une transition, et modifier la valeur dans le cookie.

Les cookies sont souvent effacés à la fermeture du navigateur, mais rarement bloqué sur le même domaine.

Les variable de session ca va être casse bonbon pour faire une effet si simple.
salut, j'ai conçus un code tout en javascript qui permet de faire ce dont vous parlez :
On peut y mettre la couleur que l'on veut
http://www.javascriptfr.com/codes/EFFET-SURBRILLANCE-JAVASCRIPT_52053.aspx

par éxemple

<div id="div2" onclick="surbrillance('div2',700,'#5050E0','#FFFFFF');">


ou en noir et blanc


<div id="div2" onclick="surbrillance('div2',700,'#FFFFFF','#000000');">


Mais pour du noir et blanc autant faire un Fadein/fadeout
http://www.javascriptfr.com/codes/FADEIN-EFFET-FONDU-ANIMATION-OPACITE-TOUT-JAVASCRIPT_52041.aspx