IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Rainbow color cycle sur un background


Sujet :

JavaScript

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2013
    Messages : 5
    Points : 7
    Points
    7
    Par défaut Rainbow color cycle sur un background
    Bonjour à tous,

    Je suis nouvelle sur ce forum, et aussi avec le JS !

    j'ai là un code qui permet de changer les couleurs d'un texte progressivement entre plusieurs couleurs.

    J'aimerai l'adapter pour changer la couleur du fond de ma page.

    Que faire ?

    Merci par avance !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    <html>
    <title>Span Color Cycle Demo</title>
    <head>
    <!--- *** BEGIN CUT - Demo starts here *** --->
    <!--   * You may use this code for free on any web page provided that
           * these comment lines and the following credits remain in the code.
           * "Link Color Cycle"http://www.javascript-fx.com
    -->
    <script type="text/javascript">
    /***********************************************
    *
    * Function    : getColor
    *
    * Parameters  :	start - the start color (in the form "RRGGBB" e.g. "FF00AC")
    *			end - the end color (in the form "RRGGBB" e.g. "FF00AC")
    *			percent - the percent (0-100) of the fade between start & end
    *
    * returns	  : color in the form "#RRGGBB" e.g. "#FA13CE"
    *
    * Description : This is a utility function. Given a start and end color and
    *		    a percentage fade it returns a color in between the 2 colors
    *
    * Author	  : www.JavaScript-FX.com
    *
    *************************************************/
    function getColor(start, end, percent){
    	function hex2dec(hex){return(parseInt(hex,16));}
    	function dec2hex(dec){return (dec < 16 ? "0" : "") + dec.toString(16);}
    	var r1 = hex2dec(start.slice(0,2)), g1=hex2dec(start.slice(2,4)), b1=hex2dec(start.slice(4,6));
    	var r2 = hex2dec(end.slice(0,2)),   g2=hex2dec(end.slice(2,4)),   b2=hex2dec(end.slice(4,6));
    	var pc = percent/100;
    	var r  = Math.floor(r1+(pc*(r2-r1)) + .5), g=Math.floor(g1+(pc*(g2-g1)) + .5), b=Math.floor(b1+(pc*(b2-b1)) + .5);
    	return("#" + dec2hex(r) + dec2hex(g) + dec2hex(b));
    }
    /************************************************/
    </script>
     
    <script>
    var colors = new Array("339966", "FF0000", "00FF00", "0000FF", "FFFF00", "FF00FF", "00FFFF", "FFffff", "000000", "ffffff", "cccccc", "999999", "333333");
    var start  = colors[0];
    var end    = colors[0];
    var index  = 0;
    var cindex = 0;
    var faderObj = new Array();
     
    function fadeSpan()
    {
    	if(index == 0)
    	{
    		start = end;
    		end = colors[ cindex = (cindex+1) % colors.length ];
    	}
     
    //	document.getElementById("fadingText").style.color = getColor(start, end, index);
    	for(var i=0 ; i<faderObj.length ; i++)
    		faderObj[i].style.color = getColor(start, end, index);
     
    	index = (index+5) % 100;
     
    	setTimeout("fadeSpan()", 100);
    }
    function fadeAll()
    {
    	for(var i=0 ; i<arguments.length ; i++)
    		faderObj[i] = document.getElementById(arguments[i]);
     
    	fadeSpan();
    }
    function JSFX_StartEffects()
    {
    	fadeAll("sp1","sp2");
    }
    </script>
    <!--- *** END   CUT - Demo ends   here *** --->
     
    </head>
     
    <body bgcolor="#000000" text="white" onLoad="JSFX_StartEffects()">
    Here is a test of the spanfader <span id="sp1">HERE IS SOME TEXT CHANGING COLORS</a></span>. You can
    <span id="sp2">Make any span</a></span> a color cycling one.
    </body>
    </html>
    Elo.

  2. #2
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    Bonjour,

    Que faire ? Adapter le code.
    Comment ? En remplaçant les span #sp1 et #sp2 ciblés dans l'exemple par l'élément body, et la propriété color par background-color.
    Peux-tu le faire pour moi ? C'est en forgeant qu'on devient forgeron, c'est en codant qu'on devient... non pas coderon

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2013
    Messages : 5
    Points : 7
    Points
    7
    Par défaut Forum d'aide ?
    Sauf qu'aucun forgerons n'est devenus forgerons tout seul. Je n'ai pas envie de confondre l'enclume et le marteau !

    En fait je m'en doutais bien! sur l'algorithmique pas de soucis, sur la logique pas de problème... quand j'ai vu ce script , je me suis dit, il faut changer la cible et probablement le nom de l'attribut couleur.

    Désolé, votre réponse est presque une lapalissade de ma question...
    Comment faire une pizzas ?
    Réponse "Faites une Régina"...c'est en pizzant qu'on devient pizzaïolo"

    Comme je l'ai dis, je ne sais pas ou est la farine que je confond avec le sel et le sucre... etc

    Si ma question est de trop bas niveau, je l'ai dis, je débute en js.

    Si je viens sur ce forum c'est pour aller plus vite que si je devais faire 12000 tests pour comprends les effets de mes modifications.

    Car, dans la plupart des cas, quand je modifie du js, soit il ne se passe rien (le code fonctionne), soit plus rien ne marche.

    Est-ce un forum où même les débutants peuvent poser des questions ou seulement pour les experts pour exposer leurs savoirs à d'autres experts ?

    Ceci dit c'est assez naturel : les experts oublient quels débutants il étaient... et deviennent les pires des pédagogues. C'est plus confortable de se dire qu'on s'ait fait tout seul... mais c'est faux, toujours faux.

    Alors oui, si on me montrais les quelques lignes à changer ça serait pour moi un exemple riche d'enseignement.

    ELo.

  4. #4
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    Je ne pense pas que te donner la solution tout cuit dans le bec soit le must de la pédagogie non plus. Nous ne sommes pas là pour coder à ta place, mais pour débloquer des situations. Or quand la question est "Que faire ?", ça ne donne pas vraiment l'impression que tu ais cherché très loin. Même pas un début de piste, un essai de code à nous montrer ?

    Par ailleurs, tu ne dois pas faire 12.000 tests pour arriver au bon résultat ; tu dois en apprendre suffisamment pour arriver au bon résultat du premier coup.

    --> En remplaçant les span #sp1 et #sp2 ciblés dans l'exemple par l'élément body
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function fadeAll()
    {
    	for(var i=0 ; i<arguments.length ; i++)
    		faderObj[i] = arguments[i];
     
    	fadeSpan();
    }
    function JSFX_StartEffects()
    {
            //fadeAll("sp1","sp2");
    	fadeAll(document.body);
    }
    --> et la propriété color par background-color.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    //faderObj[i].style.color = getColor(start, end, index);
    faderObj[i].style.backgroundColor = getColor(start, end, index);
    Tout avait été dit, et c'était largement à la portée d'un débutant.

  5. #5
    Futur Membre du Club
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2013
    Messages : 5
    Points : 7
    Points
    7
    Par défaut Très utile plus que vous le pensez
    Bonjour,

    Alors je comprend effectivement votre réflexion sur le côté pédagogique, je suis formatrice de métier (c'est peut-être que j'ai trop souffert de la rétention d'information).

    Il m'arrive de faire marner mes stagiaires, de les agacer en ne disant pas tout.

    Mais je sais faire la différence entre quelqu'un qui veut du tout cuit dans la bouche et quelqu'un qui veut un indice qui confirmera son intuition.

    Le bout de code que vous m'avez donné m'est très précieux car ça m'amène à avoir une meilleure vue d'ensemble de la façon de fonctionner du js. De sa logique etc... finalement "ça n'est pas si compliqué"

    J'avais tapé ces lignes (presque), mais rien ne se produisait, et j'en ai conclu que je n'était pas sur la bonne voie.... et que j'avais tout faux. (j'avais mis un trait d'union et vlan)... j'aurais du les envoyer pour que vous ayez confiance dans le fait que "je ne veux pas du tout cuit"

    Dans un livre, un tuto etc il n'y a pas cette notion de ce qui est essentiel ou gadget. Cette notion s'apprend plus facilement au contact de vrais gens comme vous, dans un forum.

    Pour moi qui ai été très bonne sur des langages scripts devenus obsolète (basic, hypertalk et lingo) c'est dure d'assouplir mes méninges et désapprendre ce que j'ai appris (sur le tas).

    Je trouve le js très sophistiqué par rapport à ce que l'on fait avec comme pour le css d'ailleurs avec lequel il est très facile de faire des absurdités.

    Dans les exemples trouvés sur le net, bien souvent il y a des partie non essentielles (souvent du code gênant pour comprendre car inutile dans l'exemple). Ce code gênant est bien souvent une démonstration des compétence de son auteur.

    Pour expliquer je vais donner un exemple :
    pour enseigner à une personne comment on construit une maison ont peut
    commencer par "la résistance des matériaux" ou par des théories sur l'urbanisme.... on peut aussi commencer par ce que l'apprenant sait déjà : "voici une brique, voici un parpaing". C'est une démarche plus englo-saxone.
    En france on veut être trop élitiste et donc on ne partage pas ses connaissances (c'est pour cela que le Wikipédia, les forums de discussion etc, ne sont pas des invention françaises).

    Je ne dis pas que vous êtes sur ce point trop français, mais qu'il est légitime de penser que votre perception de la transmission des savoirs peut évoluer vers une vision plus pragmatique.

    Donc merci beaucoup pour ces quelque lignes !

  6. #6
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    De rien...

  7. #7
    Futur Membre du Club
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2013
    Messages : 5
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par SylvainPV Voir le message
    "...la solution tout cuit...
    Vous m'avez montré la cuisinière, la bouteille de gaz, les allumettes.... je vais faire mijoter tout ça !

    Merci !

  8. #8
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Points : 6 755
    Points
    6 755
    Par défaut
    Salut,
    j'ai deux remarques à propos de setTimeout.

    Premièrement, lui passer une string n'est pas la plus efficace des façons de faire. Ça fait appel à eval sous le capot, et si eval est parfois utile, il vaut mieux éviter d'y avoir recours quand on peut faire autrement. En l'occurence, setTimeout accepte qu'on lui passe une référence directe à la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    //setTimeout("fadeSpan()", 100);
    setTimeout(fadeSpan, 100); // plus court, plus efficace, plus joli :)
    Secondement, pour des tâches visuelles répétitives comme celle-ci, il y a une fonction toute désignée : requestAnimationFrame. C'est une fonction qui marche un peu comme setTimeout, sauf qu'elle choisit elle-même le délai en fonction de diverses données comme l'utilisation actuelle du processeur ou si la fenêtre est actuellement visible ou non, etc. Son but est d'optimiser les performances d'affichage.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    requestAnimationFrame(fadeSpan);
    NB : C'est une fonction assez récente donc elle n'existe pas sous tous les navigateurs. Parfois il faut avoir recours à ses alternatives msRequestAnimationFrame, mozRequestAnimationFrame et webkitRequestAnimationFrame comme dans cet exemple.

Discussions similaires

  1. Coloration syntaxique sur le forum
    Par Anomaly dans le forum Evolutions du club
    Réponses: 133
    Dernier message: 02/12/2014, 18h54
  2. Propriété à appliquer sur un background-color, côté serveur
    Par cyrano_de_bergerac dans le forum ASP.NET
    Réponses: 1
    Dernier message: 13/04/2011, 18h34
  3. Problème de float /de background-color/scroll sur IE6
    Par asandoz dans le forum Mise en page CSS
    Réponses: 0
    Dernier message: 08/04/2010, 21h13
  4. Hover sur un background
    Par Lucier dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 28/10/2005, 11h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo