Javascript-在循环中最后一次超时后调用函数
我目前有一个循环,它每秒为HTML元素设置动画,在最后一个动画完成后,我希望接受用户输入:Javascript-在循环中最后一次超时后调用函数,javascript,function,loops,reactjs,timeout,Javascript,Function,Loops,Reactjs,Timeout,我目前有一个循环,它每秒为HTML元素设置动画,在最后一个动画完成后,我希望接受用户输入: playSequence(currentLevel) { console.log("playing level " + currentLevel) for (var q = 0; q < currentLevel; q++) { (function(q) { setTimeout(function() { var active = '#' + sequen
playSequence(currentLevel) {
console.log("playing level " + currentLevel)
for (var q = 0; q < currentLevel; q++) {
(function(q) {
setTimeout(function() {
var active = '#' + sequence[q].toString(); //the div currently being animated
console.log(active);
var currentColor = $(active).css('background-color');
var newColor = currentColor.replace("0.6", "1.0");
$(active).animate({
backgroundColor: newColor
}, 100, function() {}).delay(900).animate({
backgroundColor: currentColor
}, 100, function() {
if (q === (currentLevel - 1)) {
console.log("done"); //this runs
this.getInput(1, currentLevel); //this does not
}
});
}, 1000 * q)
}(q));
}
}
playSequence(当前级别){
console.log(“播放级别”+当前级别)
对于(var q=0;q
在最后一个动画之后,会打印“done”,但不会调用getInput,因为函数开头的console.log不会打印
为什么它不在最后一个计时器完成后运行,即使上面的console.log已经运行了
但是,如果我像这样移动getInput
playSequence(currentLevel) {
console.log("playing level " + currentLevel)
for (var q = 0; q < currentLevel; q++) {
(function(q) {
setTimeout(function() {
var active = '#' + sequence[q].toString(); //the div currently being animated
console.log(active);
var currentColor = $(active).css('background-color');
var newColor = currentColor.replace("0.6", "1.0");
$(active).animate({
backgroundColor: newColor
}, 100, function() {}).delay(900).animate({
backgroundColor: currentColor
}, 100, function() {
if (q === (currentLevel - 1)) {
console.log("done"); //this runs
}
});
}, 1000 * q)
}(q));
}
this.getInput(1, currentLevel); //this runs
}
playSequence(当前级别){
console.log(“播放级别”+当前级别)
对于(var q=0;q
然后getInput确实会运行,但是它不能像我希望的那样工作,因为它在动画完成之前运行,因为它在超时范围之外运行
注意:这包含在React类中,getInput不是playSequence中的一个方法,它们都在一个名为“Game”的类中。@PHPGlue的注释有效,如果将来有人偶然发现,请留下答案: 如果你做了var t=这个;在所有匿名函数中,都可以使用t.getInput()
这是一个上下文问题,在第一个示例中,
这个
指的是活动的
元素,在第二个示例中,它指的是播放序列
函数的上下文。它包含在React类中,getInput不是播放序列中的方法,它们都在一个名为“Game”的类中如果您这样做var t=this
在所有匿名函数中,您可以在其中使用t.getInput()
。@PHPglue谢谢,这很有效!在意识到这是jQuery之后,我从注释中删除了“这是匿名函数中的窗口”,以便在其他上下文中调用该函数。我希望你很快就会得到上下文绑定。