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 :

Comment optimiser ce code tout simple ?


Sujet :

JavaScript

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 18
    Points : 26
    Points
    26
    Par défaut Comment optimiser ce code tout simple ?
    Bonjour,

    J'ai écrit le code javascript ci-dessous.
    Il fonctionne très bien (une petite erreur de variable ter que je n'arrive pas à résoudre mais qui ne gêne en rien son bon fonctionnement).
    Il y a t il moyen d'optimiser ce code tout en le gardant lisible ?
    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
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
    <HEAD>
    <TITLE> change couleurs </TITLE>
    <script language="javascript" type="text/javascript">
    <!--
    // définition des couleurs 
    var coul = {"w":"FFFFFF", "c":"00FFFF", "v":"00FF00", "j":"FFFF00", "r":"FF0000", "m":"FF00FF", "b":"0000ff", "n":"000000"};
    // ordre d'enchainement des couleurs
    var ordr = "wcvjrmbwvrbcjmwjbvmcrwrcmvbjwmjcbrvwbmrjvcn";
    var i = 0;
    // variable temporaire pour le Rouge, le Vert et le Bleu
    var Rtem = 0;  
    var Vtem = 0;
    var Btem = 0;
    // variable coefficient pour le Rouge, le Vert et le Bleu
    var Rcof = 0;
    var Vcof = 0;
    var Bcof = 0;
     
    var a = 0;
    // initialisation du départ comme étant la couleur précédente
    var prec = ordr.charAt(a);
    // attribution des valeurs précédentes pour le Rouge, le Vert et le Bleu
    var Rpre = parseInt(coul[prec].substr(0,2) , 16);
    var Vpre = parseInt(coul[prec].substr(2,2) , 16);
    var Bpre = parseInt(coul[prec].substr(4,2) , 16);
    a++;
    if(a > ordr.length) {a=0;}
    // initialisation du départ comme étant la couleur actuelle 
    var actu = ordr.charAt(a);
    // attribution des valeurs actuelles pour le Rouge, le Vert et le Bleu
    var Ract = parseInt(coul[actu].substr(0,2) , 16);
    var Vact = parseInt(coul[actu].substr(2,2) , 16);
    var Bact = parseInt(coul[actu].substr(4,2) , 16);
    // coefficient positif de vitesse pour le changement des couleurs
    var cofp = 3; // 3 ou 5 ou 15 ou 17 ou 51 ou 85
    // coefficient négatif de vitesse pour le changement des couleurs
    var cofn = - cofp;
    //boucle pour passer de 00 à FF
    var bouc = 255 / cofp;
     
    function change_coul()
    {	// pour le Rouge
    	if(Ract == Rpre)  {Rcof = 0 ;} // si la couleur précédente est la même, pas de changement
    	else if(Ract > Rpre)  {Rcof = cofp ;}  // si la couleur précédent est plus petite, coefficient positif
    	else  	{Rcof = cofn ;}  // si la couleur précédent est plus grande, coefficient négatif
     
    	// pour le Vert
    	if(Vact == Vpre)  {Vcof = 0 ;}
    	else if(Vact > Vpre)  {Vcof = cofp ;}
    	else  	{Vcof = cofn ;}
     
    	// pour le Bleu
    	if(Bact == Bpre)  {Bcof = 0 ;}
    	else if(Bact > Bpre)  {Bcof = cofp ;}
    	else  	{Bcof = cofn ;}
     
    	// on incrémente chaque couleur en fonction de son coefficient
    	Rtem = Rpre + i * Rcof; 
    	Vtem = Vpre + i * Vcof ;
    	Btem = Bpre + i * Bcof ;
    	// affichage de la couleur
    	myco = "#" + ValToHex(Rtem) + ValToHex(Vtem) + ValToHex(Btem);
    	document.getElementById("titre").style.backgroundColor = myco;
     
    	// tant que l'on a pas fini de changer de couleur 
    	if(i < bouc)  { i++ ;}
    	// une fois la boucle finie, définition de la prochaine couleur à afficher
    	else
    	{	a++;
    		if(a >= ordr.length) {a = 0;}
    		i = 0;
    		Rpre = Ract;
    		Vpre = Vact;
    		Bpre = Bact;
    		prec = actu;
    		actu = ordr.charAt(a);
    		Ract = parseInt(coul[actu].substr(0,2) , 16);
    		Vact = parseInt(coul[actu].substr(2,2) , 16);
    		Bact = parseInt(coul[actu].substr(4,2) , 16);
    	}
    }
     
    function ValToHex(nomb)
    {	var hexa = nomb.toString(16);
    	return hexa.length == 1 ? "0" + hexa : hexa;
    }
     
    function interval_coul(terv)
    {	terv = setInterval("change_coul()",500); // rafraichissement de l'affichage toute les 500 millisecondes
    }
     
    //-->
    </script>
    </HEAD>
     
    <body bgcolor="#000000" onload="interval_coul()" onUnload="window.clearInterval(terv)" >
    <br>
    <h1 align="center" id="titre"><br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br><br></h1>
     
    </BODY>
    </HTML>
    Par la suite, par des "button option" je mettrai la possibilité de changer dynamiquement la vitesse
    var cofp = 3; // 3 ou 5 ou 15 ou 17 ou 51 ou 85

    Merci

  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
    Pourquoi les gens adorent donner des noms tordus à leurs variables ?

    Transitions CSS3 http://jsfiddle.net/sN8V7/

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    var coul = {"w":"FFFFFF", "c":"00FFFF", "v":"00FF00", "j":"FFFF00", "r":"FF0000", "m":"FF00FF", "b":"0000ff", "n":"000000"};var ordr = "wcvjrmbwvrbcjmwjbvmcrwrcmvbjwmjcbrvwbmrjvcn";
    var currentColor = 0;
     
     
    function change_coul(){
        document.getElementById("titre").style.backgroundColor = "#"+coul[ordr[currentColor]];
        currentColor = (currentColor+1) % ordr.length;
    }
     
    terv = setInterval(change_coul,500);
    window.onunload = function(){
        window.clearInterval(terv);
    };
    Code css : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #titre {    -webkit-transition: background-color 500ms linear;
        -moz-transition: background-color 500ms linear;
        -o-transition: background-color 500ms linear;
        -ms-transition: background-color 500ms linear;
        transition: background-color 500ms linear;
    }
    One Web to rule them all

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 18
    Points : 26
    Points
    26
    Par défaut
    Merci SylvainPV pour cette proposition d'utilisation du css3.

    Ma question était l'optimisation du code javascript, et tu m'ouvres de nouveaux horizons.

    Après un rapide coup d'oeil, il me semble qu'il ne serait pas possible d'avoir la possibilité d'agir sur le changement de la vitesse comme je pourrais le faire en modifiant la valeur de
    var cofp = 3; // 3 ou 5 ou 15 ou 17 ou 51 ou 85
    Je vais étudier de près l'utilisation du css3 pour vérifier si mon apriori est fondé

    Citation Envoyé par SylvainPV Voir le message
    Pourquoi les gens adorent donner des noms tordus à leurs variables ?
    Je débute en programmation et je préfère utiliser des noms de variable qui me parlent.
    Toutes celles qui commencent par R concernent le rouge, idem pour V -> vert et B -> bleu.
    Ensuite tem pour temporaire, pre pour précédente, coe pour coefficient, act pour actuelle,
    cofp -> coefficient positif
    cofn -> coefficient négatif
    terv -> interval de rafraichissement affichage
    myco -> my color
    etc.

    Comme elles ont la même longueur, c'est plus lisible.

  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
    C'est un point de vue, mais j'ai bien galéré pour comprendre ce que désignaient ces variables J'avais d'ailleurs complètement zappé ce principe de changement de vitesse avec coep, là où un previousSpeedCoef aurait été plus parlant. Pour changer la vitesse de transition, tu peux modifier à la volée en JS la propriété CSS transition-duration.
    One Web to rule them all

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 18
    Points : 26
    Points
    26
    Par défaut
    comme quoi un code bien documenté rend bien des services, je vais m'y employer... désolé !

    voilà, c'est fait !

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 18
    Points : 26
    Points
    26
    Par défaut
    Dans le code, j'ai un peu de mal à comprendre l'interaction entre l'intervalle dans javascript
    interval = setInterval(change_couleur,500);
    et le trsanslation-duration dans le style.
    transition-duration: 2000ms;

    Dans javascript, chaque 500 ms, le code est exécuté.
    Dans ccs3, la transition dure le temps indiqué 2000ms.
    Est-ce Javascript reprend la main avant que le style ait terminé ?
    Il me semblerait que oui, mais j'ai quand même un doute.
    Dans ce cas, il faudrait que les deux valeurs soient égales, ce qui semble difficile à définir à l'avance.
    Soit la transition est interrompue avant la fin par javascript, soit la coueur reste fixe le temps que javascript reprenne la main.

    Je ne suis pas arrivé à définir en css une suite de transition en cascade... Est-ce possible ?
    Nous sortons du cadre Javascript, dois-je aller poster ailleurs ?

  7. #7
    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
    En théorie c'est possible en CSS uniquement en décrivant une animation, mais la syntaxe va être assez fastidieuse. En JS, tu es beaucoup plus libre.
    Si la vitesse de transition est variable, n'oublie pas que tu peux définir les propriétés CSS en JavaScript :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById("titre").style.transitionDuration = duree+"ms";
    One Web to rule them all

Discussions similaires

  1. [Layout] Comment faire un truc tout simple?
    Par ®om dans le forum AWT/Swing
    Réponses: 9
    Dernier message: 16/07/2007, 15h11
  2. Comment faire un tableau tout simple dans un état
    Par robertetgorgette dans le forum Access
    Réponses: 1
    Dernier message: 25/07/2006, 15h20
  3. un petit code tout simple o_O avec des $POST variable :)
    Par dark_vidor dans le forum Langage
    Réponses: 5
    Dernier message: 08/04/2006, 01h08
  4. comment optimiser son code en calcul ???
    Par gronaze dans le forum C
    Réponses: 5
    Dernier message: 21/03/2006, 10h41
  5. [Perf] Comment optimiser son code ?
    Par Frifron dans le forum Général Java
    Réponses: 12
    Dernier message: 11/08/2005, 09h05

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