我正在尝试在for循环中执行setInterval,但不是在interval中执行,而是立即执行。
在此示例中,我尝试使用.bind()
var bck =['red','yellow'];
for(var i = 0;i<bck.length;i++){
var num = i;
console.log(num)
setInterval(function() {
$('.demoDiv').css('background',bck[num]);
}.bind(num), 5000);
}
我也试过创建一个闭包。
for(var i = 0;i<bck.length;i++){
(function(i) {
var _set= setInterval(function(){
$('.demoDiv').css('background',bck[i]);
}, 5000)
}(i));
}
这是JSFIDDLE
答案 0 :(得分:1)
为什么要硬编码?你不需要使用循环,只需 setInterval 就可以了。
var bck = ['red', 'yellow'];
var i = 0;
setInterval(function() {
$('.demoDiv').css('background', bck[i%2]);
i++;
}, 5000)
&#13;
.demoDiv {
background: rebeccapurple;
width: 200px;
height: 200px;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="demoDiv">
</div>
&#13;
编辑:由@Akshay Khandelwal强化,使用模数而不是if state。
答案 1 :(得分:0)
我选择使用数学运算来实现同样的目标,而不是重新设置i
这显然是一个好主意。
var bck =['red','yellow'];
var i =0;
var _set= setInterval(function(c) {
$('.demoDiv').css('background',bck[i%2]); // Check the modulus value;
i++;
}, 5000)