Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/424.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery无限动画导致调用堆栈错误_Javascript_Jquery_Jquery Color - Fatal编程技术网

Javascript 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,

我使用的是jQuery和jQuery颜色的最新版本。我试图用动画无限地改变我的容器的颜色。但是当我运行下面的代码时,我得到了一个错误:“uncaughtrangeerror:超过了最大调用堆栈大小”。动画循环工作正常,但它会阻止jQuery代码的其余部分执行。我不知道堆栈溢出是从哪里来的

  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是唯一的解决方案