Podpowiem ci jak to zrobić. Musisz zrobić funkcje wywołujące same siebie dopóki dany kolor nie został osiągnięty. Kolor najłatwiej podawać jako rgb(R%, G%, B%). Poszczególne kolory muszą się odpowiednio zmieniać co wywołanie funkcji, dzięki czemu osiągasz płynność.
element.style.color = 'rgb(' + r + '%, ' + g + '%, ' + b + '%)';
Jednak od razu mówię, że szkoda zachodu na taką zmianę normalnego tekstowego linku. Ale zmiana tła da fajny efekt.