Я создал скрипт, который затеняет цвет фона элемента. Я использую setTimeout () для постепенного изменения цвета каждые 5 мс. Сценарий прекрасно работает, если я просто замираю фоновым цветом одной вещи за раз, но если у меня есть, скажем, 50 элементов, я замираю сразу, скорость намного ниже 5 мс из-за одновременный запуск setTimeout (). Например, затухание, которое обычно должно выполняться за 1 секунду, может занять 30 секунд, если я замирал 50 элементов одновременно.
Есть идеи, как мне это преодолеть?
Вот сценарий на случай, если у кого-то есть идеи:
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] + ")";
}
}
Используется так:
fadeBackground("myList", [98,180,232], [255,255,255], 1000);