1

我有几个单独的标题:

<h3 class="ads">First</h3>

<h3 class="ads">Second</h3>

<h3 class="ads">Third</h3> 

我希望能够不断地循环遍历它们,将文本从黑色变为红色,然后在下一个标题变为红色时再变回黑色。

到目前为止,这是我所拥有的:它可以工作一次,但是我无法成功地重新循环:

$('.ads').each(function(i) { 
    var el=$(this);
    setTimeout(function() {
        el.prevAll('.ads').css('color','black');
        el.css('color', 'red');
    }, i * 3000); 
});

我希望能够手动设置每次更改之间的等待时间,因此解释也会有很大帮助!

这是jsFiddle。

4

2 回答 2

5

这是一种略有不同的方法。

jsFiddle 演示

var $headings = $('.ads'),
    $length = $headings.length,
    i = 0;

setInterval(function() {
    $headings.css('color','black');
    $headings.eq(i).css('color', 'red');
    i = (i + 1) % $length;
}, 3000); 
于 2013-09-22T15:20:05.063 回答
4

您可以使用递归优雅地做到这一点。

// configure the delay
var delay = 1000;

// save a pointer to the first element
var first = $('.ads').first();

// this function does the following
// a. color the current element red
// b. make all siblings black
// c. call itself with the next applicable element
function change(_elem) {
    _elem.css('color','red').siblings().css('color', 'black');
    setTimeout(function() {
        change((_elem.next().length > 0) ? _elem.next() : first);
    }, delay);
}

// start if off
change(first);

演示:http: //jsfiddle.net/gNrMJ/16/

于 2013-09-22T15:23:05.600 回答