Foros del Web » Programando para Internet » Javascript »

codigo misterioso

Estas en el tema de codigo misterioso en el foro de Javascript en Foros del Web. Estoy haciendo un cronómetro y bueno, aqui tengo varias dudas. La primera es con respecto a la función moverse para que un botón se mueva. ...
  #1 (permalink)  
Antiguo 17/04/2012, 10:46
(Desactivado)
 
Fecha de Ingreso: marzo-2012
Mensajes: 366
Antigüedad: 12 años
Puntos: 31
codigo misterioso

Estoy haciendo un cronómetro y bueno, aqui tengo varias dudas. La primera es con respecto a la función moverse para que un botón se mueva. Es una duda sin importancia, seguramente esté mal pueda la instrucción Math.random. (la he deshabilitado porque si no no funciona el crono)

La segunda es con respecto a @font-face. No se si funciona sin haber declarado qué tipo de documento es, pues lo mismo solo funciona con html5? No tengo ni idea, el caso es que no me coje el archivo de fuentes truetype.

Y la más importante, en la que más me ha hecho comerme la cabeza durante horas, e incluso habiendo sido revisado el código por mi profesora... ninguno de los 2 hemos llegado a la conclusión del fallo. Este cronómetro se reinicia solo al llegar a los 8 segundos. Misterioso.

<html>
<head>
<style type="text/css">
@font-face {font-family:"digiface";src:url(digiface.ttf);format("tr uetype");}
.caja1{font-size:80px;font-family:"digiface";color:white;background-color:black;}
</style>
<script language="JavaScript">
enmarcha=false;
centesimas=0;
segundos=0;
minutos=0;
var frecuencia
function marcha()
{
if (enmarcha==false)
{
enmarcha=true;
frecuencia=setInterval("contarparar()",10);
}
else
{
enmarcha=false;
clearInterval(frecuencia)
}
}
function contarparar()
{
if (enmarcha==true)
{
centesimas++;
if (parseInt(centesimas)<10)
{
centesimas=parseInt(centesimas);
centesimas="0"+centesimas;
}
if (parseInt(centesimas)==100)
{
centesimas=0;
segundos++;
}
if (parseInt(segundos)<10)
{
segundos=parseInt(segundos);
segundos="0"+segundos;
}
if (parseInt(segundos)==60)
{
segundos=0;
minutos++;
}
if (parseInt(minutos)<10)
{
minutos=parseInt(minutos);
minutos="0"+minutos;
}
if (parseInt(minutos)==60)
{
enmarcha=false;
clearInterval(frecuencia)
alert("Este cronómetro solo mide el tiempo hasta una hora.");
centesimas=0;
segundos=0;
minutos=0;
}
document.cronometro.pantalla.value=(minutos+":"+se gundos+":"+centesimas);
}
}
function recomenzar()
{
centesimas=0;
segundos=0;
minutos=0;
document.cronometro.pantalla.value="00:00:00";
}
/*function moverse()
{
if enmarcha==true
{
document.cronometro.pantalla.style.top=(Math.rando m()*500);
document.cronometro.pantalla.style.left=(Math.rand om()*500);
}
}*/
</script>
</head>
<body bgcolor=#99ff99>
<center>
<form name="cronometro" style="width:800px; height:500px; background-color:white;">
<center>
<h2>Mi super-Cronómetro de la muerte mortal</h2>
<input name="pantalla" class="caja1" value="00:00:00" size=5>
<br>
<input name="startstop" type=button value="Start / Stop" onClick="marcha();contarparar();" onMouseOver="moverse();">
<input name="a_cero" type=button value="Comenzar" onClick="recomenzar();">
</center>
</form>
</center>
</body>
</html>

---------------

Fíjense en la parte correspondiente a:

if (parseInt(segundos)<10)
{
segundos=parseInt(segundos);
segundos="0"+segundos;
}

Esto lo hago para que siempre me salgan 2 dígitos en los segundos aunque el número de segundos solo contenga 1 dígito.

Hemos probado a funcionar con 1 solo dígito... y el crono funciona correctamente. Sin embargo, poniendo esto para convertir los segundos a 2 dígitos cuando es necesario... resulta que el cronómetro se reinicia a los 8 segundos. (Y por qué a los 8?)
  #2 (permalink)  
Antiguo 17/04/2012, 11:48
Avatar de mike28gt  
Fecha de Ingreso: abril-2010
Mensajes: 56
Antigüedad: 14 años
Puntos: 14
Respuesta: codigo misterioso

Hola, me llamo mucho la atención el comportamiento de tu código, por lo que quise ver que ocurría, honestamente no supe cual era el problema en sí, pero me llamo la atención el casteo que se estaba realizando con el parseInt, además de eso refactorice un poco tu código y cambie la lógica del despliegue de los números, y así funciono.

Código:
<html>
<head>
<style type="text/css">
@font-face {font-family:"digiface";src:url(digiface.ttf);format("tr uetype");}
.caja1{font-size:80px;font-family:"digiface";color:white;background-color:black;}
</style>
<script language="JavaScript">
	var enmarcha=false;
	var centesimas = 0;
	var segundos = 0;
	var minutos = 0;

	var frecuencia

	function marcha()
	{
		if (enmarcha==false)
		{
			enmarcha=true;
			frecuencia=setInterval("contarparar()",10);
		}
		else
		{
			enmarcha=false;
			clearInterval(frecuencia)
		}
	}
	
	function agregarCero(val)
	{
		if (val < 10)
			val = "0" + val.toString();
			
		return val;
	}
	
	function contarparar()
	{
		if (enmarcha==true)
		{
			centesimas++;
			
			if (centesimas == 100)
			{
				centesimas=0;
				segundos++;
			}

			if (segundos == 60)
			{
				segundos = 0;
				minutos++;
			}

			if (minutos == 60)
			{
				enmarcha=false;
				clearInterval(frecuencia)
				
				alert("Este cronómetro solo mide el tiempo hasta una hora.");
				
				centesimas = 0;
				segundos = 0;
				minutos = 0;	
			}

			document.cronometro.pantalla.value=(agregarCero(minutos) + ":" + 
												agregarCero(segundos) + ":" + 
												agregarCero(centesimas));
		}
	}

	function recomenzar()
	{
		centesimas=0;
		segundos=0;
		minutos=0;
		document.cronometro.pantalla.value="00:00:00";
	}
	
	/*function moverse()
	{
		if enmarcha==true
		{
			document.cronometro.pantalla.style.top=(Math.rando m()*500);
			document.cronometro.pantalla.style.left=(Math.rand om()*500);
		}
	}*/

</script>
</head>
<body bgcolor=#99ff99>
<center>
<form name="cronometro" style="width:800px; height:500px; background-color:white;">
<center>
<h2>Mi super-Cronómetro de la muerte mortal</h2>
<input name="pantalla" class="caja1" value="00:00:00" size=5>
<br>
<!-- <input name="startstop" type=button value="Start / Stop" onClick="marcha(); contarparar();" onMouseOver="/*moverse();*/"> -->
<input name="startstop" type=button value="Start / Stop" onClick="marcha();">
<input name="a_cero" type=button value="Comenzar" onClick="recomenzar();">
</center>
</form>
</center>
</body>
</html>
  #3 (permalink)  
Antiguo 17/04/2012, 12:01
Avatar de mike28gt  
Fecha de Ingreso: abril-2010
Mensajes: 56
Antigüedad: 14 años
Puntos: 14
Respuesta: codigo misterioso

Compañero que cosas las de JavaScript no? la respuesta a lo que sucede es tan sencillo como esto:

La función parseInt en JavaScript no sabe como interpretar la cadena de texto "08" o "09" por si sola, puesto que no puede determinar la base numérica con la que esta trabajando, y en JavaScript los numeros que empiezan con "0" son considerados en base octal y no existen los números "08" y "09" en base octal.

Para arreglar este problema puedes llamar a la función parseInt indicandole en que base numérica estas trabajando, de esta forma:

parseInt('08', 10);

Espero haberte podido ayudar, esta información la puedes encontrar aquí: http://www.ventanazul.com/webzine/articles/issues-parseint-javascript

Saludos!
  #4 (permalink)  
Antiguo 17/04/2012, 12:36
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 9 meses
Puntos: 1567
Respuesta: codigo misterioso

Te agrego lo del fontface, funciona en cualquier navegador, bajate un kit prefabricado a tu gusto desde
http://www.fontsquirrel.com/fontface

El zip que descargues contiene una demo y como implementarlo.
Recordá que para que se vea en todos los navegadores necesitas como minimo los formatos ttf y eot

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #5 (permalink)  
Antiguo 17/04/2012, 23:20
(Desactivado)
 
Fecha de Ingreso: marzo-2012
Mensajes: 366
Antigüedad: 12 años
Puntos: 31
Respuesta: codigo misterioso

Cita:
Iniciado por mike28gt Ver Mensaje
Hola, me llamo mucho la atención el comportamiento de tu código, por lo que quise ver que ocurría, honestamente no supe cual era el problema en sí, pero me llamo la atención el casteo que se estaba realizando con el parseInt, además de eso refactorice un poco tu código y cambie la lógica del despliegue de los números, y así funciono.

Código:
function agregarCero(val)
{
	if (val < 10)
		val = "0" + val.toString();
		return val;
}
document.cronometro.pantalla.value=(agregarCero(minutos) + ":" + agregarCero(segundos) + ":" + agregarCero(centesimas));
Con esta forma de poner el cero delante el cronómetro va perfecto.



Cita:
Iniciado por mike28gt Ver Mensaje
Compañero que cosas las de JavaScript no? la respuesta a lo que sucede es tan sencillo como esto:

La función parseInt en JavaScript no sabe como interpretar la cadena de texto "08" o "09" por si sola, puesto que no puede determinar la base numérica con la que esta trabajando, y en JavaScript los numeros que empiezan con "0" son considerados en base octal y no existen los números "08" y "09" en base octal.

Para arreglar este problema puedes llamar a la función parseInt indicandole en que base numérica estas trabajando, de esta forma:

parseInt('08', 10);

Espero haberte podido ayudar, esta información la puedes encontrar aquí: http://www.ventanazul.com/webzine/articles/issues-parseint-javascript

Saludos!
Cosa curiosa. Quién se lo hubiese imaginado.
  #6 (permalink)  
Antiguo 17/04/2012, 23:30
(Desactivado)
 
Fecha de Ingreso: marzo-2012
Mensajes: 366
Antigüedad: 12 años
Puntos: 31
Respuesta: codigo misterioso

Cita:
Iniciado por emprear Ver Mensaje
Te agrego lo del fontface, funciona en cualquier navegador, bajate un kit prefabricado a tu gusto desde
[url]http://www.fontsquirrel.com/fontface[/url]

El zip que descargues contiene una demo y como implementarlo.
Recordá que para que se vea en todos los navegadores necesitas como minimo los formatos ttf y eot

Saludos
No me sirve. en la demo trabaja con XHTML. Mi duda era más que nada si @font-face funciona con <html> o si acaso con html5.
  #7 (permalink)  
Antiguo 17/04/2012, 23:40
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 9 meses
Puntos: 1567
Respuesta: codigo misterioso

fonface es una propiedad de css, por lo tanto funciona en html4 html5, xhtml...
que es lo que "no te sirve"?

__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #8 (permalink)  
Antiguo 21/04/2012, 05:19
(Desactivado)
 
Fecha de Ingreso: marzo-2012
Mensajes: 366
Antigüedad: 12 años
Puntos: 31
Respuesta: codigo misterioso

Probaré transformando el código que viene ahí por código html4 a ver si así...

Etiquetas: funcion, html, input
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 12:50.