Foros del Web » Programando para Internet » Javascript »

incrementos en for (y de paso selección de colores)

Estas en el tema de incrementos en for (y de paso selección de colores) en el foro de Javascript en Foros del Web. Hola amigos: Hice una pequeña página para asignar colores rgb, y al querer usar un bucle grande, tardaba mucho en cargarse, por lo que decidí ...
  #1 (permalink)  
Antiguo 30/12/2002, 01:00
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
incrementos en for (y de paso selección de colores)

Hola amigos:

Hice una pequeña página para asignar colores rgb, y al querer usar un bucle grande, tardaba mucho en cargarse, por lo que decidí hacer los incrementos de más de un valor, y al probarlo se me queda colgado el ordenador ya sea usando explorer o netscape.

La página funcionando es la que sigue:

<html>
<head>
<style>
td {
height:2;
width:2;
cursor:help;
}
</style>
<script language="javascript">
var h = "0123456789ABCDEF";
function hexa(n) {
if (n < 16) return "0" + h.charAt(n);
else return (h.charAt(n / 16) + h.charAt(n % 16));
}

function rgb(r, g, b) {
return "#" + hexa(r) + hexa(g) + hexa(b);
}
</script>
</head>
<body>
<script language="javascript">
var tabla = "<table cellpadding=0 cellspacing=0>";
for (var i = 0; i < 256; i ++) if (i % 16 == 0 ){
tabla += "<tr>";
for (var j = 0; j < 256; j ++) if (j % 16 == 0)
for (var k = 0; k < 256; k ++) if (k % 16 == 0) {
tabla += "<td onclick='alert(rgb(" + i + ", " + j + ", " + k + "))' style='background-color:" + rgb(i, j, k) + "' ></td>";
}
tabla += "</tr>";
}
tabla += "</table>";
document.write(tabla);
</script>
</body>
</html>

Si pongo
for (var i = 0; i < 256; i + 2) se me cuelga el ordenador...

¿Que les parece la idea?
¿Sabrían decirme como mejorarla?

Gracias y Felicidades
  #2 (permalink)  
Antiguo 30/12/2002, 01:18
Avatar de SpiceMan  
Fecha de Ingreso: noviembre-2002
Mensajes: 160
Antigüedad: 21 años, 5 meses
Puntos: 0
poniendo i+2 no se llega nunca a la condición (i < 256) ya que i+2 = verdadero, pero el valor de i no se altera, generando una iteración o bucle sin fín.

en vez de poner i+2 deberías poner i = i+2, o sea

for (i = 0; i < 256 ; i = i+2) { ... }

saludos.
  #3 (permalink)  
Antiguo 30/12/2002, 01:56
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Gracias SpiceMan:

Como uno siempre usa el i++ surgen estos pequeños poblemas.

Lo pruebo y te lo digo...

Saludos
  #4 (permalink)  
Antiguo 30/12/2002, 03:36
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Hola:

Cambié un poco la página y quedó así:

<html>
<head>
<style>
td {
height:6;
width:2;
cursor:crosshair;
}
</style>
<script language="javascript">
var h = "0123456789ABCDEF";
function hexa(n) {
if (n < 16) return "0" + h.charAt(n);
else return (h.charAt(n / 16) + h.charAt(n % 16));
}

function rgb(r, g, b) {
return "#" + hexa(r) + hexa(g) + hexa(b);
}
function mostrar(color) {
document.colores.selec.value = color;
document.getElementById("muestra").style.backgroun dColor = color;
}

</script>
</head>
<body>
<script language="javascript">
var tabla = "<table cellpadding=0 cellspacing=0>";
for (var i = 0; i < 256; i = i + 16) {
tabla += "<tr>";
for (var j = 0; j < 256; j = j + 16)
for (var k = 0; k < 256; k = k + 16) {
tabla += "<td onmousemove='mostrar(rgb(" + i + ", " + j + ", " + k + "))'";
tabla += " onclick='alert(\"" + rgb(i, j, k) + "\")'";
tabla += " style='background-color:" + rgb(i, j, k) + "' ></td>";
}
tabla += "</tr>";
}
tabla += "</table>";
document.write(tabla);
</script>
<br><hr><br>
<form name=colores >
selección actual: <input type=text name=selec value="" \>
</form>
<div id=muestra style="background-color:#000000;border:solid;width:40;height:14">
</body>
</html>

Saludos
  #5 (permalink)  
Antiguo 30/12/2002, 07:44
Avatar de Kaopectate
Colaborador
 
Fecha de Ingreso: diciembre-2001
Ubicación: Curaçao (Antillas Holandesas)
Mensajes: 3.179
Antigüedad: 22 años, 4 meses
Puntos: 38
Caricatos, es desesperantemente lento, pero bien vale la espera. El resultado es excelente man. Voy a darle un vistazo y si algo puedo aportar hablamos.
  #6 (permalink)  
Antiguo 30/12/2002, 07:52
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
Caricatos

los primeros minutos llegué a la conclusión de que se me había colgado el navegador. Lo dejé ahí mientras hacía otras cosas y al poco reaccionó y oh sorpresa! Queda coixonudo

Te felicito.

Lo estudiaré con calma a ver si veo la luz para lograr que tarde menos. Si se me ocurre algo te cuento.

un saludo
  #7 (permalink)  
Antiguo 30/12/2002, 08:07
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
Hola de nuevo,

he probado a pedirle que escriba los valores directamente en lugar de guardarlos todos dentro de una variable y luego escribirla y la verdad es que el tiempo de carga se ha mejorado enormemente (al menos en mi compu). Me carga en aprox. 10 segundos. Lo curioso es que me sale la advertencia de que la ejecución de comandos blablá puede enlentecer internet explorer que si deseo continuar. Pero le dices que "pos claro!" y en breve tienes la tabla cargada.

<html>
<head>
<style>
td {
height:6;
width:2;
cursor:crosshair;
}
</style>
<script language="javascript">
var h = "0123456789ABCDEF";
function hexa(n) {
if (n < 16) return "0" + h.charAt(n);
else return (h.charAt(n / 16) + h.charAt(n % 16));
}

function rgb(r, g, b) {
return "#" + hexa(r) + hexa(g) + hexa(b);
}
function mostrar(color) {
document.colores.selec.value = color;
document.getElementById("muestra").style.backgroun dColor = color;
}

</script>
</head>
<body>
<script language="javascript">
document.write("<table cellpadding=0 cellspacing=0>");
for (var i = 0; i < 256; i = i + 16) {
document.write ("<tr>");
for (var j = 0; j < 256; j = j + 16)
for (var k = 0; k < 256; k = k + 16) {
document.write ("<td onmousemove='mostrar(rgb(" + i + ", " + j + ", " + k + "))'");
document.write (" onclick='alert(\"" + rgb(i, j, k) + "\")'");
document.write (" style='background-color:" + rgb(i, j, k) + "' ></td>");
}
document.write ("</tr>");
}
document.write ("</table>");
//document.write(tabla);
</script>
<br><hr><br>
<form name=colores >
selección actual: <input type=text name=selec value="" \>
</form>
<div id=muestra style="background-color:#000000;border:solid;width:40;height:14">
</body>
</html>
  #8 (permalink)  
Antiguo 30/12/2002, 09:25
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Hola otra vez:

Me alegra saber que está bien la "paginita" (tan solo es un script, y para eso nos metemos en este foro).
Creo que se podría simplificar más, pero habría que ver si se consiguen nuestras pretensiones (por mi parte es conseguir una selección de colores rápida y suficientemente completa)

He tanteado el aporte de tunait y se nota más rápido...
Tal vez habría que quitar el 3º "for" para que no salte el span de advertencia (sin sentido)

Bueno... Creo que por un par de días no volveré a conectarme, así que...

Feliz 2003

  #9 (permalink)  
Antiguo 30/12/2002, 09:29
Avatar de Kaopectate
Colaborador
 
Fecha de Ingreso: diciembre-2001
Ubicación: Curaçao (Antillas Holandesas)
Mensajes: 3.179
Antigüedad: 22 años, 4 meses
Puntos: 38
¡Feliz 2003 Caricatos!
  #10 (permalink)  
Antiguo 30/12/2002, 09:31
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
Así no nos veremos yá hasta el años que viene, Caricatos (qué lejos suena eso)

Felíz 2003 Caricatos (disfruta de lás últimas horas del último año capicúa que vamos presenciar en nuestra vida)
  #11 (permalink)  
Antiguo 30/12/2002, 11:56
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 2 meses
Puntos: 772
Hola.

Caricatos: ¿nunca dejas de pensar? Yo cuando lo hago se me pone un dolor de cabeza enorme Por cierto el resultado es estupendo.

No he probado el código original, pero si el de tunait (soy bastante impaciente) y se ha ejecutado realmente rápido, apenas 4 ó 5 segundos.

¡¡ Muy feliz año 2003 para todos !!

P.D. El próximo año capicua será el 2112, creo que ya estaré muy mayor para pulular por los foros.
  #12 (permalink)  
Antiguo 30/12/2002, 12:04
Avatar de Kaopectate
Colaborador
 
Fecha de Ingreso: diciembre-2001
Ubicación: Curaçao (Antillas Holandesas)
Mensajes: 3.179
Antigüedad: 22 años, 4 meses
Puntos: 38
No importa Javier, si me acuerdo te mando un email.

Saludos.
  #13 (permalink)  
Antiguo 30/12/2002, 12:08
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
yo creo que para el 2112 el mail será un sistema pasado de moda.
Probablemente la moda será teletransportarse y darse una palmadita en la espalda
  #14 (permalink)  
Antiguo 30/12/2002, 12:09
Avatar de Kaopectate
Colaborador
 
Fecha de Ingreso: diciembre-2001
Ubicación: Curaçao (Antillas Holandesas)
Mensajes: 3.179
Antigüedad: 22 años, 4 meses
Puntos: 38
Pues trataré de no palmear muy fuerte a Javier en el 2112. Uno no sabe si va a estar en forma.
  #15 (permalink)  
Antiguo 30/12/2002, 12:11
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
¿Su espalda o tu mano?


(y la de off topics que andamos soltando últimamente con la escusa de la Navidad)
  #16 (permalink)  
Antiguo 30/12/2002, 12:13
Avatar de Kaopectate
Colaborador
 
Fecha de Ingreso: diciembre-2001
Ubicación: Curaçao (Antillas Holandesas)
Mensajes: 3.179
Antigüedad: 22 años, 4 meses
Puntos: 38
El que quede como moderador va a tener que limpiar su propia basura y la de los demás.
  #17 (permalink)  
Antiguo 30/12/2002, 12:17
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
arg!
Además el puesto de moderación viene con una sola escoba, así que nadie más podrá ayudar a limpiar!
  #18 (permalink)  
Antiguo 30/12/2002, 12:54
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 2 meses
Puntos: 772
Cita:
Mensaje Original por Kaopectate
El que quede como moderador va a tener que limpiar su propia basura y la de los demás.
Por eszo me e bhenido a ezte forro, akí ni siquierra toy nominao
  #19 (permalink)  
Antiguo 26/01/2003, 14:00
ALM
 
Fecha de Ingreso: noviembre-2002
Mensajes: 16
Antigüedad: 21 años, 5 meses
Puntos: 0
Quizas te sirva este enlace

Aqui

http://ar.geocities.com/itcrespo/dis...ormulascol.htm

programe una calculadora interactiva de colores para convertir de RGB a CMYK, CMY, HTML, etc.

Espero que te sirva.

Saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:42.