Esta es mi primera inmersión real en JavaScript. Seguro que lo he usado antes, pero nunca he escrito nada desde cero.setTimeout ignora el tiempo de espera? (Incendios inmediatamente)
De todos modos, estoy teniendo un problema muy extraño que espero que alguien pueda descubrir por mí.
Estoy tratando de hacer que el texto de un div se desvanezca de negro a blanco. Simple, si?
El siguiente código funciona. Cambiará el color a blanco, sin embargo, se está ignorando el tiempo setTimeout de 500 ms.
Si usa Chrome y mira la consola JS, verá fácilmente que el método doFade() se está llamando casi instantáneamente, no cada 500 milisegundos.
¿Alguien puede explicar esto?
var started = false;
var newColor;
var div;
var hex = 0;
function fadestart(){
if (typeof fadestart.storedColor == 'undefined') {
div = document.getElementById('test');
fadestart.storedColor = div.style.color;
}
if(!started){
console.log('fadestart');
newColor = fadestart.storedColor;
started = true;
setTimeout(doFade(), 500);
}
}
function fadestop(){
console.log('fadestop');
div.style.color = fadestart.storedColor;
started = false;
hex = 0;
}
function doFade(){
if(hex<=238){
console.log(hex);
hex+=17;
div.style.color="rgb("+hex+","+hex+","+hex+")";
setTimeout(doFade(), 500);
}
}
En realidad, usted quiere 'dofade()' como una cadena, entre comillas. Tienes la causa raíz, sin embargo. –
Sí 'func' se evalúa a la función en sí, mientras' func() 'llama a la función y evalúa su valor de retorno. –
bastante seguro de que no necesita cotizaciones. Debería poder poner doFade o "doFade". Creo que incluso podría haber ligeros beneficios de rendimiento al no convertir la cadena "doFade" en el identificador de función. – KeatsKelleher