嗨我正试图让一行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 先谢谢你了
答案 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);
答案 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();