He creado una secuencia de comandos que desvanece el color de fondo de un elemento. Uso setTimeout() para hacer un cambio incremental al color cada 5 ms. La secuencia de comandos funciona muy bien si solo estoy desvaneciendo el color de fondo de una cosa a la vez, pero si tengo, digamos, 50 elementos me estoy desvaneciendo a la vez, la velocidad es mucho más lenta que 5 ms debido a todo el setTimeout() simultáneo corriendo al mismo tiempo. Un desvanecimiento que normalmente debería ejecutarse en 1 segundo, por ejemplo, puede tomar 30 segundos si me estoy desvaneciendo 50 elementos a la vez.JavaScript setTimeout() se ralentiza bajo mucha carga
¿Alguna idea de cómo puedo superar esto?
Aquí está la secuencia de comandos en caso de que alguien tiene una ideas de:
function fadeBackground(elementId, start, end, time) {
var iterations = Math.round(time/5);
var step = new Array(3);
step[0] = (end[0] - start[0])/iterations;
step[1] = (end[1] - start[1])/iterations;
step[2] = (end[2] - start[2])/iterations;
stepFade(elementId, start, step, end, iterations);
}
function stepFade(elementId, cur, step, end, iterationsLeft) {
iterationsLeft--;
document.getElementById(elementId).style.backgroundColor
= "rgb(" + cur[0] + "," + cur[1] + "," + cur[2] + ")";
cur[0] = Math.round(end[0] - step[0] * iterationsLeft);
cur[1] = Math.round(end[1] - step[1] * iterationsLeft);
cur[2] = Math.round(end[2] - step[2] * iterationsLeft);
if (iterationsLeft > 1) {
setTimeout(function() {
stepFade(elementId, cur, step, end, iterationsLeft);
}, 5);
}
else {
document.getElementById(elementId).style.backgroundColor
= "rgb(" + end[0] + "," + end[1] + "," + end[2] + ")";
}
}
Es utilizado como esto:
fadeBackground("myList", [98,180,232], [255,255,255], 1000);
Estaba pensando que un temporizador podría ser el camino a seguir, pero temía tener que implementar el cambio. :) De hecho, decidí lanzar el mío porque estaba usando jQuery para animar() y no se desvaneció un 10% del tiempo. Desafortunadamente, esa es una tasa de error inaceptable. Veré el artículo. ¡Muchas gracias! – core
Heh. Stackoverflow también tiene ese problema de "no se puede animar". – Nosredna