Вы вызываете setTimeout
из своей функции, таким образом добавляя в стек каждый вызов.
Вместо этого используйте интервальный вызов извне функции:
function BlinkText() {
var TheTextColors = ['red', 'white', 'blue'];
var TheColor = Math.floor(Math.random() * 3) + 1;
var TheOpacity = (Math.floor(Math.random() * 20) + 80) / 100;
$('#TheText').css('color', TheTextColors [TheColor]);
$('#TheText').css('opacity', TheOpacity);
}
setInterval(BlinkText, 2000);
Вы можете дополнительно оптимизировать этот код следующим образом:
var BlinkText = (function() {
var TheTextColors = ['red', 'white', 'blue'],
$element = $('#TheText');
return function()
{
var TheColor = Math.floor(Math.random() * 3) + 1,
TheOpacity = (Math.floor(Math.random() * 20) + 80) / 100;
$element.css({
'color': TheTextColors[TheColor],
'opacity': TheOpacity
});
};
}());
setInterval(BlinkText, 2000);
Здесь мы делаем 3 вещи по-разному:
- Мы не запрашиваем DOM каждые 2 секунды для вашегоэлемент.Мы кешируем его один раз и используем повторно.
- Также нет необходимости каждый раз создавать новый массив цветов.
- Наконец, мы заключаем все это в самозаполняющуюся анонимную функциючтобы мы не загрязняли глобальное пространство имен этими переменными.