Soyez le premier à donner votre avis sur cette source.
Snippet vu 8 437 fois - Téléchargée 21 fois
<style type="text/css"> table { border-collapse: collapse; } { td padding: 10px; } </style> <script type="text/javascript"> function initColor( _divContent) { var a=1; var b=12; var max=256; var x=0; var y=0; var z=0; var div=Math.pow(2, (1/3*b)); div = Math.round(div)-1; var mult = max/div; mult = Math.round(mult); while(z <= div) { var _table= document.createElement("table"); // Ajoute la table document.getElementById(_divContent).appendChild(_table); if(a==1){_table.border="1"} y=0; while(y <= div) { x=0; // insère une ligne var _row = _table.insertRow(y); while(x <= div) { // insère une cellule. var _cell = _row.insertCell(x); _cell.style.backgroundColor = "rgb("+x*mult+", "+y*mult+", "+z*mult+")"; _cell.style.color = "rgb("+(max-x*mult)+", "+(max-y*mult)+", "+(max-z*mult)+")"; if(a==1) { _cell.innerHTML = (x*mult+"/"+y*mult+"/"+z*mult); } x++; } y++; } z++; } } </script> <body onload="initColor('divContent')"> <div id="divContent" ></div> </body>
27 juil. 2009 à 11:52
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
27 juil. 2009 à 11:48
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
22 juil. 2009 à 20:17
22 juil. 2009 à 15:03
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
22 juil. 2009 à 14:50
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.