Javascript jQuery无限动画导致调用堆栈错误
我使用的是jQuery和jQuery颜色的最新版本。我试图用动画无限地改变我的容器的颜色。但是当我运行下面的代码时,我得到了一个错误:“uncaughtrangeerror:超过了最大调用堆栈大小”。动画循环工作正常,但它会阻止jQuery代码的其余部分执行。我不知道堆栈溢出是从哪里来的Javascript jQuery无限动画导致调用堆栈错误,javascript,jquery,jquery-color,Javascript,Jquery,Jquery Color,我使用的是jQuery和jQuery颜色的最新版本。我试图用动画无限地改变我的容器的颜色。但是当我运行下面的代码时,我得到了一个错误:“uncaughtrangeerror:超过了最大调用堆栈大小”。动画循环工作正常,但它会阻止jQuery代码的其余部分执行。我不知道堆栈溢出是从哪里来的 let $container = $("#container"); let colours = ["56, 68, 97", "97, 56, 80", "42, 74, 53", "104, 66,
let $container = $("#container");
let colours = ["56, 68, 97", "97, 56, 80", "42, 74, 53", "104, 66, 44"];
(function colourAnimation() {
colours.forEach((colour) => {
$container.animate({"color": "rgb(" + colour + ")",
"background-color": "rgba(" + colour + ", 0.2)",
"border-color": "rgba(" + colour + ", 0.7)",
}, 2500);
});
$container.animate({}, 0, "", colourAnimation);
})()
函数colorAnimation()以调用方法
animate
结束,该方法的第四个参数已传递colorAnimation
docs@表示第四个参数是 动画完成后要调用的函数,每个调用一次 匹配元素
当然,代码会无限递归?您的
函数colorAnimation()
以调用方法animate
结束,该方法的第四个参数已传递colorAnimation
docs@表示第四个参数是 动画完成后要调用的函数,每个调用一次 匹配元素
当然,代码将无限递归?如果您希望代码无限运行,只需使用
setInterval(function,time)
,其中时间以毫秒为单位。可以找到更好的解释如果希望代码无限运行,只需使用setInterval(function,time)
,其中时间以毫秒为单位。可以找到更好的解释正如robut所说,函数一完成就调用它。所以,函数基本上是无限被调用的。你的意思是把最后一行放在函数之外的函数中吗?我需要无限地调用函数,动画才能无限地循环。除非有其他方法可以在没有堆栈错误的情况下实现此效果。您可以使用setInterval(colorAnimation,time)代码>其中时间应以毫秒为单位。这里有一个解释——正如robut所说,您可以在函数完成后立即调用它。所以,函数基本上是无限被调用的。你的意思是把最后一行放在函数之外的函数中吗?我需要无限地调用函数,动画才能无限地循环。除非有其他方法可以在没有堆栈错误的情况下实现此效果。您可以使用setInterval(colorAnimation,time)代码>其中时间应以毫秒为单位。这里有一个解释-是的,但不应该在动画结束时进行调用(在这种情况下,每4*2500毫秒一次)?获取调用堆栈错误(对我来说)表明回调没有等待动画持续时间。是的,但不应该在动画结束时进行调用(在这种情况下,每4*2500ms一次)?获取调用堆栈错误表明(对我来说)回调没有等待动画持续时间。我的理解是,在这种情况下,使用setInterval
将是一种糟糕的做法,因为可能会引入竞争条件。我知道我上面的代码应该能够正常工作,但是,要么我在语法方面遗漏了一些东西,要么我误解了回调或iife的一些基本内容。@liphenste很抱歉回复太晚,但是setInterval是唯一的解决方案。我的理解是,在这种情况下使用setInterval
将是一种糟糕的做法,因为可能会引入竞争条件。我知道我上面的代码应该在某种程度上起作用,“但是,要么我在语法方面遗漏了一些东西,要么我误解了回调或IIFEs的一些基本内容。”liphenste为响应得太晚感到抱歉,但setInterval是唯一的解决方案