JEU DE COULEURS DANS UN TABLEAU À 3 DIMENSION

jdmcreator Messages postés 647 Date d'inscription samedi 30 décembre 2000 Statut Membre Dernière intervention 20 juillet 2012 - 22 juil. 2009 à 14:26
LeFauve42 Messages postés 239 Date d'inscription vendredi 20 octobre 2006 Statut Membre Dernière intervention 20 avril 2009 - 27 juil. 2009 à 11:52
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/50351-jeu-de-couleurs-dans-un-tableau-a-3-dimension

LeFauve42 Messages postés 239 Date d'inscription vendredi 20 octobre 2006 Statut Membre Dernière intervention 20 avril 2009
27 juil. 2009 à 11:52
Ah oui... j'ai oublie :
Ton algo pour trouver la couleur avec le meilleur contraste (pour la couleur du texte) n'est pas le plus efficace (regarde les couleurs vers le milieu du spectre).
Au lieu de mettre dans chaque composante "max-c" (si c est la valeur de la composante pour le background), essaie "(c>max/2)?0:max" (sans les "s bien sur :o) ).
En clair, si la composante est superieurs a la moitie de sa valeur, tu la mets a zero, sinon tu la mets au max.

Le rendu sera plus agreable.

Eric
LeFauve42 Messages postés 239 Date d'inscription vendredi 20 octobre 2006 Statut Membre Dernière intervention 20 avril 2009
27 juil. 2009 à 11:48
Salut,

C'est un bon exemple d'utilisation du DOM, bien que pas super utile (un background png elargi a la bonne taille peut faire la meme chose).
De plus, c'est quoi ces valeurs de 259 pour les composantes ? En principe, ca s'arrete a 255.
Pour info, il est generalement aquis qu'il vaut mieux se limiter aux 216 couleurs "WebSafe" pour plus de portablite, mais pourquoi pas si tu veux vraiment plus de couleurs.

A propos du code, j'ai deux remarques (et demi) :
- document.getElementById() est assez couteux. Tu aurais donc interet a cacher le resultat dans une variable plutot que de le reexecuter a chaque iteration de ta boucle.
- Dans ce type d'utilisation, tu peux remplacer tes while par des for.
Au lieu de :
y=0;
while(y <= div)
{
// Ton code ici
y++;
}
tu peux avoir:
for(y=0; y <= div; ++y)
{
// Ton code ici
}

- Derniere demi remarque: Quand tu n'utilises pas le code de retour, la preincrementation est plus rapide que la postdecrementation. En clair, utilise "++y" au lieu de "y++" (les navigateurs modernes devraient optimiser ca tout seuls, mais pense aux necessiteux qui n'ont qu'Internet Explorer pour naviguer :o) )

Eric
Niidhogg Messages postés 42 Date d'inscription dimanche 8 février 2009 Statut Membre Dernière intervention 11 octobre 2015 1
22 juil. 2009 à 20:17
document.write coriger.
jdmcreator Messages postés 647 Date d'inscription samedi 30 décembre 2000 Statut Membre Dernière intervention 20 juillet 2012 7
22 juil. 2009 à 15:03
innerHTML est une propriété et non une fonction. On l'écrira ainsi :
document.getElementById(id).innerHTML=nouvellevaleur;
Elle remplace le contenu. Pour l'ajouter, tu peux faire :
document.getElementById(id).innerHTML=document.getElementById(id).innerHTML+nouvellevaleur;

JDMCreator
Niidhogg Messages postés 42 Date d'inscription dimanche 8 février 2009 Statut Membre Dernière intervention 11 octobre 2015 1
22 juil. 2009 à 14:50
Ok, merci. Mais j'aurai encore une petite question. innerHTML() rajouter a la suite du contenue du div, ou le remplace ?
jdmcreator Messages postés 647 Date d'inscription samedi 30 décembre 2000 Statut Membre Dernière intervention 20 juillet 2012 7
22 juil. 2009 à 14:26
Bonjour,

Pour remplacer les document.write(), tu peux avoir dans ta page un
dont tu modifie le contenu HTML à l'aide de la propriété innerHTML ;)

JDMCreator
Rejoignez-nous