运行下面的代码一段时间后,出现“超出最大堆栈调用大小”错误。 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