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 :

Changer plusieurs fois la couleur d'un texte en cliquant sur des boutons


Sujet :

JavaScript

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Artiste plasticien
    Inscrit en
    Novembre 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Artiste plasticien
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Novembre 2017
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Changer plusieurs fois la couleur d'un texte en cliquant sur des boutons
    Bonjour,

    Pour commencer j'arrive à m'en sortir en html et css mais je ne suis pas du tout un as en script, et je pense que j'ai besoin de passer par un script pour réaliser le projet que j'ai en tête.

    Alors, j'ai le but de modifier un texte via deux boutons. A la base le texte est en gris 50%, plus on clique sur le premier bouton plus le texte tend vers le blanc et à l'opposé plus on clique sur le second bouton plus le texte tend vers le noir.
    Ainsi, au fur et à mesure des clics, on peut constater l'évolution de la couleur du texte, en sachant que j'aimerai que ça "perdure sur le temps", que ça ne revienne pas à un gris 50% à chaque actualisation de la page.

    Étant pas du tout familier au script j'avoue ne pas savoir vers où commencer ! Si ça ne vous parait pas clair pour le traduire en script, n'hésitez pas à m'en demander plus !

    Merci d'avance si vous prenez le temps de me répondre.

    Cordialement,
    CaseVide

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 234
    Points : 15 531
    Points
    15 531
    Par défaut
    En ce qui concerne les boutons qui modifient une couleur, c'est faisable en JavaScript. À chaque action sur le bouton, le code JavaScript modifiera le code CSS qui définit la couleur.

    Par contre pour garder en "mémoire" le choix de la couleur, il faudra utiliser un langage côté serveur comme PHP. Il faudra définir si la couleur est affiché seulement à l'utilisateur courant ? Et si cet utilisateur c'est identifié ? Ou alors la couleur modifiée est montrée à tous les visiteurs du site ?

  3. #3
    Membre chevronné
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Points : 1 975
    Points
    1 975
    Par défaut
    Pour la partie javascript, un bout de code :
    Code html : 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
     
    <!DOCTYPE html>
    <html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>Page Title</title>
    </head>
     
    <body>
    <script>
        var TabBut=[],TabFunctionClic=[];
        var x=0.5;
        var montexte="Chaîne de caractères et canal alpha.";
        var divtext=document.createElement('div');
         divtext.style.width=700+"px";
         divtext.style.height=40+"px";
         divtext.style.position="absolute";
         divtext.style.left=200+"px";
         divtext.style.top=10+"px";
         divtext.style.font= "bold 40px arial";
         divtext.style.color= 'rgba(0,0,0,'+x+')';
         divtext. textContent =montexte;
         document.body.appendChild(divtext);
         
         TabFunctionClic[0]=function(){
          if (x>0.00) x-=0.10;
          divtext.style.color= 'rgba(0,0,0,'+x+')'; 
          divtext.textContent =montexte;
        };
        
        TabFunctionClic[1]=function(){
          if (x<1) x+=0.10;
          divtext.style.color= 'rgba(0,0,0,'+x+')'; 
          divtext.textContent =montexte;
        };
        
     
        for(var i=0;i<=1;i++){
            TabBut[i]=document.createElement('input');
            TabBut[i].type='button';
            TabBut[i].style.width=160+"px";
            TabBut[i].style.height=40+"px";
            TabBut[i].style.position="absolute";
            TabBut[i].style.left=10+"px";
            
           if (i===0){
            TabBut[i].style.top=10+"px";
            TabBut[i].value="éclaicir";
            }
            else {
                TabBut[i].style.top=50+"px";
                TabBut[i].value="foncer";
            }
            document.body.appendChild(TabBut[i]);
            TabBut[i].addEventListener('click',TabFunctionClic[i]);
        }
    </script>
    </body>
    </html>

    Après pour l'actualisation de la page, c'est côté serveur en effet...

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Si ça ne concerne que cet utilisateur, pas (nécessairement) besoin de PHP : on enregistre via JS dans un cookie.

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Artiste plasticien
    Inscrit en
    Novembre 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Artiste plasticien
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Novembre 2017
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    mathieu, pour le coup l'idée est de le poser sur un site et ensuite d'effectivement le garder en mémoire afin de le montrer à tous les visiteurs du site et que chacun puisse cliquer pour modifier la couleur, pour qu'à terme on puisse voir une modification générale, mais du coup ça m'intéresse aussi de savoir comment le faire.

    Archimède, le script est nickel, mais effectivement j'avais oublié de mentionner un détail important, le background du body est aussi en gris 50%, ce qui fait que le texte est de la même couleur que le fond au début, et qu'il s'assombrit/s'éclaircit au fur et à mesure que l'on clique. Je vois (et je ne pense pas me tromper, mais je ne suis pas sûr, hein !) que tu as fait la modification par rapport à la transparence du texte. du coup j'ai une question, est ce que c'est possible de transformer sa couleur et non sa transparence, pour amener vers les différents tons de gris, comme tu l'as fait avec la transparence ?

    jreaux62, merci pour l'idée, je pense qu'au début, ce sera que "l'utilisateur" pour voir si ça fonctionne et à terme, c'est d'effectivement le mettre en réseau pour que tout le monde puisse le voir et le faire évoluer.


    Et enfin, désolé, je suis vraiment une bille en script !!

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Artiste plasticien
    Inscrit en
    Novembre 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Artiste plasticien
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Novembre 2017
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    c'est bon Archimède, j'ai trouvé !

    Code HTML : 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
    <!DOCTYPE html>
    <html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <style>body{background-color : rgb(127,127,127);}</style>
        <title>Page Title</title>
    </head>
     
    <body>
    <script>
        var TabBut=[],TabFunctionClic=[];
        var x=127;
        var montexte="Chaîne de caractères et canal alpha.";
        var divtext=document.createElement('div');
         divtext.style.width=700+"px";
         divtext.style.height=40+"px";
         divtext.style.position="absolute";
         divtext.style.left=200+"px";
         divtext.style.top=10+"px";
         divtext.style.font= "bold 40px arial";
         divtext.style.color= 'rgb('+x+','+x+','+x+')';
         divtext. textContent =montexte;
         document.body.appendChild(divtext);
         
         TabFunctionClic[0]=function(){
          if (x>0) x-=5;
          divtext.style.color= 'rgb('+x+','+x+','+x+')'; 
          divtext.textContent =montexte;
        };
        
        TabFunctionClic[1]=function(){
          if (x<255) x+=5;
          divtext.style.color= 'rgb('+x+','+x+','+x+')'; 
          divtext.textContent =montexte;
        };
        
     
        for(var i=0;i<=1;i++){
            TabBut[i]=document.createElement('input');
            TabBut[i].type='button';
            TabBut[i].style.width=160+"px";
            TabBut[i].style.height=40+"px";
            TabBut[i].style.position="absolute";
            TabBut[i].style.left=10+"px";
            
           if (i===0){
            TabBut[i].style.top=10+"px";
            TabBut[i].value="foncer";
            }
            else {
                TabBut[i].style.top=50+"px";
                TabBut[i].value="éclaicir";
            }
            document.body.appendChild(TabBut[i]);
            TabBut[i].addEventListener('click',TabFunctionClic[i]);
        }
    </script>
    </body>
    </html>

  7. #7
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 234
    Points : 15 531
    Points
    15 531
    Par défaut
    l'étape suivante est d'envoyer les choix de couleur au serveur pour les enregistrer
    Cela peut se faire par exemple avec jQuery comme cela :
    https://javascript.developpez.com/faq/jquery/?page=Ajax

    Si vous avez des questions pour cette étape, vous pouvez créer une discussion dans le forum AJAX :
    https://www.developpez.net/forums/f4...ipt-dart/ajax/

  8. #8
    Membre chevronné
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Points : 1 975
    Points
    1 975
    Par défaut
    Très bien, il suffisait de faire varier l'intensité de niveau de gris...
    Pour le rafraichissement, tu peux sans doute t'en sortir avec localStorage ou sessionStorage si ça ne concerne que cet utilisateur... A voir

  9. #9
    Invité
    Invité(e)
    Par défaut
    Bon.
    Après, on n'est pas obligé de tout générer en JavaScript :

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <div id="montexte">Hello the World !</div>
    <button type="button" id="txt-plus">foncer</button>
    <button type="button" id="txt-moins">éclaircir</button>
    Code css : 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
    body {
      background-color: rgb(127, 127, 127);
    }
    #montexte {
      position: absolute;
      width: 700px;
      height: 40px;
      left: 200px;
      top: 10px;
      font: bold 40px Arial;
    }
    #txt-plus {
      position: absolute;
      width: 160px;
      height: 40px;
      left: 10px;
      top: 10px;
    }
    #txt-moins {
      position: absolute;
      width: 160px;
      height: 40px;
      left: 10px;
      top: 50px;
    }
    Code JavaScript : 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
    var x = 127;
     
    var divtext = document.getElementById("montexte");
    divtext.style.color = "rgb(" + x + "," + x + "," + x + ")";
     
    var txtplus = document.getElementById("txt-plus");
    txtplusClic = function() {
      if (x > 0) x -= 5;
      divtext.style.color = "rgb(" + x + "," + x + "," + x + ")";
    };
    txtplus.addEventListener("click", txtplusClic);
     
    var txtmoins = document.getElementById("txt-moins");
    txtmoinsClic = function() {
      if (x < 255) x += 5;
      divtext.style.color = "rgb(" + x + "," + x + "," + x + ")";
    };
    txtmoins.addEventListener("click", txtmoinsClic);

    Le CSS et HTML sont, à mon avis, plus simple à modifier / positionner.

    Un CSS minimaliste :
    Code css : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    body {
      background-color: rgb(127, 127, 127);
    }
    #montexte {
      font: bold 40px Arial;
    }
    #txt-plus, #txt-moins {
      padding:5px;
    }

  10. #10
    Membre chevronné
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Points : 1 975
    Points
    1 975
    Par défaut
    J'ai tenté le coup avec storage et pour le rafraichissement de la page, ça a l'air de fonctionner... Je n'ai pas fait de séparation HTML, CSS, javascript, je n'ai pas le temps et puis pour toi, c'est plus simple pour tester... (1 simple copier-coller plutôt que trois).

    Code html : 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
     
    <!DOCTYPE html>
    <html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <style>body{background-color : rgb(127,127,127);}</style>
        <title>Page Title</title>
    </head>
     
    <body>
    <script>
        var TabBut=[],TabFunctionClic=[];
        var x=127;
        if(window.localStorage.getItem('valeurx')) x = parseInt(window.localStorage.getItem('valeurx'));
        
        const montexte="Chaîne de caractères et niveaux de gris.";
        var divtext=document.createElement('div');
         divtext.style.width=700+"px";
         divtext.style.height=40+"px";
         divtext.style.position="absolute";
         divtext.style.left=200+"px";
         divtext.style.top=10+"px";
         divtext.style.font= "bold 40px arial";
         divtext.style.color= 'rgb('+x+','+x+','+x+')';
         divtext. textContent =montexte;
         document.body.appendChild(divtext);
     
         TabFunctionClic[0]=function(){
          if (x>0) x-=5;
          divtext.style.color= 'rgb('+x+','+x+','+x+')'; 
          divtext.textContent =montexte;
          addStorage();
        };
     
        TabFunctionClic[1]=function(){
          if (x<255) x+=5;
          divtext.style.color= 'rgb('+x+','+x+','+x+')'; 
          divtext.textContent =montexte;
          addStorage();
        };
     
     
        for(var i=0;i<=1;i++){
            TabBut[i]=document.createElement('input');
            TabBut[i].type='button';
            TabBut[i].style.width=160+"px";
            TabBut[i].style.height=40+"px";
            TabBut[i].style.position="absolute";
            TabBut[i].style.left=10+"px";
     
           if (i===0){
            TabBut[i].style.top=10+"px";
            TabBut[i].value="foncer";
            }
            else {
                TabBut[i].style.top=50+"px";
                TabBut[i].value="éclaicir";
            }
            document.body.appendChild(TabBut[i]);
            TabBut[i].addEventListener('click',TabFunctionClic[i]);
        }
        
        function addStorage(){
         var storage=window.localStorage;
          if(storage)
                storage.setItem('valeurx',x.toString());
          else $('.testSession').html('le sessionStorage n\'est pas implémenté sur ce navigateur');
        }
    </script>
    </body>
    </html>

  11. #11
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Bonjour,
    Je n'ai pas fait de séparation HTML, CSS, javascript, je n'ai pas le temps et puis pour toi, c'est plus simple pour tester... (1 simple copier-coller plutôt que trois).
    pour les fichiers de test tu peux tout mettre dans la page, la séparation sera quand même effective et le code bien plus lisible et facile à maintenir/modifier

  12. #12
    Membre chevronné
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Points : 1 975
    Points
    1 975
    Par défaut
    Ok, merci pour l'info.

  13. #13
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Un autre avantage est que si tu passes ton fichier en « production » tu peux récupérer facilement les différentes couches ( CSS, JS) pour les externaliser.

Discussions similaires

  1. Créer un texte en cliquant sur des boutons.
    Par azmodai dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 17/02/2009, 19h13
  2. Supprimer le texte d'une zone de texte en cliquant sur un bouton ?
    Par beegees dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 05/02/2008, 13h53
  3. Modifier un champ de texte en cliquant sur un bouton radio
    Par vikti dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 24/10/2007, 14h20
  4. changer plusieurs fois de couleurs
    Par AlexFred dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 12/09/2007, 09h24
  5. Réponses: 13
    Dernier message: 07/08/2006, 10h13

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