我有很多div
.led{
width: 100px;
height: 100px;
background-color: red;
opacity: 1;
float: left;
margin: 5px 5px;
opacity: 0;
}
<div class="led" id="id1"></div>
<div class="led" id="id2"></div>
<div class="led" id="id3"></div>
我希望将opacity
设置为一个接一个,每个之间延迟1秒。我试过这个功能,但它没有用。
<script type="text/javascript">
var leds = $(".led");
for (var i=0; i<leds.length; i++) {
setTimeout(function (){
alert();
$('#' + leds[i]).css('opacity' , '1');
}, 1000);
}
</script>
答案 0 :(得分:1)
工作代码:
var leds = $(".led");
for (var i = 0; i < leds.length; i++) {
(function(idx) {
setTimeout(function() {
$('#' + leds[idx].id).css('opacity', '1');
}, 1000 * idx);
})(i)
}
&#13;
.led {
width: 100px;
height: 100px;
background-color: red;
float: left;
margin: 5px 5px;
padding:15px;
opacity: 0;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="led" id="id1">TEST 1</div>
<div class="led" id="id2">TEST 2</div>
<div class="led" id="id3">TEST 4</div>
&#13;
您的代码问题:
i
始终引用3
内的setTimeout
,因为它绑定到函数外部的同一变量。我们可以使用IIFE修复它并将i
作为参数传递给该函数。leds[i]
指的是DOM元素,它不代表该元素的id。因此$('#' + leds[i])
什么都不做。setTimeout
时间需要与idx
计数器的倍数,以便它们不会一次显示所有内容,但会延迟1000毫秒。您也可以尝试这种过渡效果:
var leds = $(".led");
for (var i = 0; i < leds.length; i++) {
(function(idx) {
setTimeout(function() {
$('#' + leds[idx].id).css('opacity', '1');
}, 1000 * idx);
})(i)
}
&#13;
.led {
width: 100px;
height: 100px;
background-color: red;
float: left;
margin: 5px 5px;
padding: 15px;
opacity: 0;
transition: opacity .9s;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="led" id="id1">TEST 1</div>
<div class="led" id="id2">TEST 2</div>
<div class="led" id="id3">TEST 4</div>
&#13;
答案 1 :(得分:1)