运行下面的代码一段时间后,出现“超出最大堆栈调用大小”错误。 setInterval()应该能够无缝地递归运行,因此我不确定该错误是由它还是代码的另一部分引起的。

function blinkCursor() {
    $("#cursor").animate({opacity: 0}).animate({opacity: 1});
} setInterval(blinkCursor, 600);


这是代码的最后一部分。但是我没有上面的部分进行了测试,也没有问题。无论如何,现在我不确定。

function type() {
    var firstSentence = "Human rights",
        firstSentenceCounter = 0,
        intervalID = setInterval(typeWithDelay, 150);

    function typeWithDelay() {
        $("#text").text(firstSentence.substring(0, firstSentenceCounter++));

        if(firstSentenceCounter == firstSentence.length+1) {
            clearInterval(intervalID);
        }
    }
} setTimeout(type, 1500);

最佳答案

animate()默认持续时间为400。

您会在动画完成之前很久就不断调用函数,并不断添加到永不停止增长的动画队列中。

400 + 400 = 800 ...当前使用的间隔大于600

更好的方法是使用上一个动画回调来初始化下一轮,而不是使用setInterval

function blinkCursor() {
    $("#cursor").animate({opacity: 0}).animate({opacity: 1}, blinkCursor );
}
blinkCursor(); // initialize once

09-18 06:00