使用setInterval更改背景颜色

时间:2013-09-15 09:00:25

标签: javascript jquery css html

嗨我正试图让一行div闪烁,但是一个div应该一次闪烁。(不是所有的div都应该同时闪烁[我能做到]) ..

有点像红绿灯的工作方式。每盏灯都是一排灯的一部分,每盏灯一次打开和关闭一个灯。在我的情况下,闪烁是为了提醒用户div或可点击。

我把每个盒子放在一个数组中,但我无法弄清楚如何改变循环中每个盒子的颜色。我想解决这个问题的方法是添加和删除包含颜色的类,它应该在1或2秒后执行,因此setInterval应该可以进行播放。我无法理解。

但这是我悲伤的代码

            var arr =[];
        $(".boxes").each(function(){
            arr.push($(this));
        });     

      function bgChange(){

            for(i = 0; i < arr.length; i++){
            arr[i].addClass("red"); 
            }           
        }
            setInterval(bgChange, 2000);

    });

我希望看到你们能够想出创造性的方式来完成这项工作。

JSFIDDLE 先谢谢你了

4 个答案:

答案 0 :(得分:3)

尝试:

    var arr = $(".boxes");

    var current = 0;
    function bgChange(){
         if (arr.length > 0){
            //Remove class of all items
            arr.removeClass("red");
            //Set Class of current item
            arr.eq(current).addClass("red");     
            //Increase the current index
            current = (current + 1) % arr.length;
         }
    }
    setInterval(bgChange, 2000);

DEMO

答案 1 :(得分:2)

您可以尝试使用以下代码执行此操作。 Demo

$(document).ready(function () {
    var arr = [];
    var i = 0;

    $(".boxes").each(function () {
        arr.push($(this));
    });

    function bgChange() {
        for (var count = 0; count < arr.length; count++) {
            if (i == count) arr[count].css('background-color', 'red');
            else arr[count].css('background-color', 'white');
        }
        i++;
        if (i === arr.length) i = 0;
    }
    setInterval(bgChange, 2000);

});

编辑:如果您想通过使用CSS类来完成,请将for循环修改为如下所示:

    for (var count = 0; count < arr.length; count++) {
        if (i == count) arr[count].addClass('red');
        else arr[count].removeClass('red');
    }

答案 2 :(得分:1)

尝试

var $boxes = $(".boxes");

function bgChange(){
    var $active = $boxes.filter('.red'), $next = $active.next('.boxes');
    if(!$next.length){
        $next = $boxes.first();
    }

    $active.removeClass('red');
    $next.addClass('red');
}
setInterval(bgChange, 2000);

演示:Fiddle

答案 3 :(得分:0)

您可以使用toggleClass设置当前框的类:

var boxes = $(".boxes");
var current = 0;

function animate() {
    boxes.each(function(index) {
        $(this).toggleClass("red", index == current);
    });
    current = (current + 1) % boxes.length;
    setTimeout(animate, 1000);
};

animate();

jsFiddle demo