Вы должны посмотреть в JQuery. Он сделает все это за вас, используя функции Effects или плагины.
Однако в ответ на вопрос:
Обычно веб-браузеры используют только один поток обновления пользовательского интерфейса, который также используется для выполнения кода Javascript. Поэтому браузер выполнит ваш цикл полностью и только после этого обновит страницу после ее завершения (т. Е. Все RGG = 255 255 255).
Попробуйте использовать window.setTimeout или window.setInterval для вызова функции, которая увеличивает значения RGB. Это позволяет потоку обновления пользовательского интерфейса браузера обновлять отображение после каждого вызова (между интервалом или тайм-аутом).
(Я полагаю, что все основные браузеры работают таким образом, включая Firefox).
Примечание: setInterval и setTimeout выполняют код в одном и том же потоке пользовательского интерфейса. Они просто добавляют обратный вызов таймера в цикл сообщений окна, и это вызывается и выполняется в правильное время.
Поэтому, если в то время выполнялся другой код Javascript или обновление пользовательского интерфейса, функция таймера должна ждать. Таким образом, функция не гарантируется в указанное время. Кроме того (в Windows) максимальное разрешение намного меньше 1 миллисекунды, часто около 1/20 секунды или около 50 миллисекунд.