我創建了一個淡化元素背景顏色的腳本。我使用setTimeout()每5毫秒對顏色進行漸進式更改。如果我一次只是淡化一種東西的背景顏色,那麼這個腳本很好用,但是如果我有50個元素,我會立即全部消失,速度比5 ms慢得多,因爲所有併發setTimeout()同時運行。例如,通常應該在1秒內執行的淡入淡出,如果我一次淡入50個元素,則可能需要30秒。JavaScript setTimeout()在重負載下減速
任何想法,我可以克服這一點?
這裏是萬一有人腳本有一個想法:
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);
我在想,一個計時器可能是要走的路,但我擔心有實施變革。 :)我實際上決定推出自己的產品,因爲我使用jQuery來製作動畫效果(),但實際上大約10%的時間沒有真正消失。不幸的是,這是一個不可接受的錯誤率。我會看看這篇文章。非常感謝! – core 2009-07-30 20:43:34