我创建了下一个代码:
setTimeout(function () {
var dot = document.querySelectorAll('.dot');
for (var i=0;i<dot.length;i++) {
dot[i].style.backgroundColor = 'blue';
}
},2000);
.container{
display: flex;
justify-content: space-around;
}
.dot{
background-color: red;
width: 20px;
height: 20px;
border-radius: 50%;
}
<div class="container">
<div class="dot"></div>
<div class="dot" ></div>
<div class="dot" ></div>
</div>
此代码在2秒后同时为每个点应用背景色,但是我想分别为每个点应用样式。例如:2秒钟后将样式应用于第一个点,然后2秒钟后将样式应用于第二个点,依此类推。谁有解决方案?
答案 0 :(得分:3)
简单的方法是创建单独的计时器,通过乘以循环索引,使每个等待时间比上一个长2000
毫秒:
var dot = document.querySelectorAll('.dot');
for (let i=0;i<dot.length;i++) { // ***
setTimeout(function () {
dot[i].style.backgroundColor = 'blue';
}, i * 2000);
}
还要注意在循环中使用let
而不是var
,以便每个循环迭代都获得自己的i
副本。如果您无法使用ES2015功能,请参见this question's answers,以了解如何在i
循环中处理for
。
如果我们使用的是ES2015,则最好使用for-of
循环:
let i = 0;
for (const dot of document.querySelectorAll('.dot')) {
setTimeout(() => {
dot.style.backgroundColor = 'blue';
}, i++ * 2000);
}
这取决于NodeList
中的querySelectorAll
是可迭代的,它在现代浏览器中是可迭代的。我不知道是否有使用ES2015的浏览器,但还没有使NodeList
变得可迭代;如果有的话,您可以使用this answer's technique来增加可迭代性。
答案 1 :(得分:3)
将setTimeout放入for循环中,并将i
与2000乘以设置不同的时间间隔
var dot = document.querySelectorAll('.dot');
for (let i = 0; i < dot.length; i++) {
setTimeout(function() {
dot[i].style.backgroundColor = 'blue';
}, i * 2000);
}
.container {
display: flex;
justify-content: space-around;
}
.dot {
background-color: red;
width: 20px;
height: 20px;
border-radius: 50%;
}
<div class="container">
<div class="dot"></div>
<div class="dot"></div>
<div class="dot"></div>
</div>
答案 2 :(得分:0)
var i = 0;
var dot = document.querySelectorAll('.dot');
var interval = setInterval(function () {
dot[i].style.backgroundColor = 'blue';
i++;
if (i >= dot.length) clearInterval(interval);
},2000);
答案 3 :(得分:0)
您可以尝试使用很长的路: setTimeout(function(){ var dot = document.querySelectorAll('。dot');
setTimeout(function () {
for (var i=0;i<dot.length;i++) {
dot[0].style.backgroundColor = 'blue';
}
setTimeout(function () {
for (var i=0;i<dot.length;i++) {
dot[1].style.backgroundColor = 'blue';
}
},2000);
},2000);
},2000);
</script>```
但是我建议(i * 2000)
答案 4 :(得分:0)
尝试使用setInterval,似乎非常适合您的情况。
#:import utils kivy.utils
<MyGrid>:
canvas.before:
Color:
rgba: utils.get_color_from_hex('#a1d0f4')
Rectangle:
pos: self.pos
size: self.size
GridLayout:
cols: 1
size: root.width, root.height
Label:
text: 'logo here'
GridLayout:
cols: 2
Label:
text: ' vision logo goes here'
GridLayout:
cols:1
Button:
size: 700, 120
size_hint: None, None # <---
background_color: utils.get_color_from_hex('#0a74c4')
font_name: 'fonts/Shoroq-Font.ttf'
text: root.bidi_text
font_size: sp(20)
Image:
source: 'images/conference-256.png'
y: self.parent.y + 5
x: self.parent.x + 70
Button:
text:'button'
background_color: utils.get_color_from_hex('#0a74c4')
Button:
text:'button'
background_color: utils.get_color_from_hex('#0a74c4')
Button:
text:'button'
background_color: utils.get_color_from_hex('#0a74c4')
GridLayout:
cols: 3
Button:
text: 'button'
background_color: utils.get_color_from_hex('#ff0000')
Button:
text: 'button'
background_color: utils.get_color_from_hex('#0a74c4')
Label:
text: 'some text here'