我有以下javascript:
var i = 0;
var intervalCounter = setInterval(function(){
[... CODE HERE ...]
if (i >= (arrayLength - 1)) {
clearInterval(intervalCounter);
}
else {
i++;
}
}, 200);
但是,(你已经猜到了),clearInterval(intervalCounter);
并没有清除间隔。
如果if
条件
if (i === (arrayLength - 1))
但javascript引擎如何反复错过i
大于(arrayLength-1)
?
答案 0 :(得分:2)
以下代码正常工作,在控制台上显示0到9:
var a = Array (10),
i = 0,
intervalCounter = setInterval(function(){
console.log (i);
if (i >= (a.length - 1)) {
clearInterval(intervalCounter);
}
else {
i++;
}
}, 200);
您的问题必须是i
或arrayLength
的值,请尝试在每次迭代时显示这些变量
答案 1 :(得分:0)
事实证明,答案在其他地方,脚本的下方 - 为了完整起见,我将其包括在内。
从各种测试中,看起来错误与脚本执行的速度有关。该脚本控制在页面加载时发生的快速动画,因此我从
更改了事件监听器window.addEventListener('load',activateAnimation,false);
到
window.addEventListener('DOMContentLoaded',activateAnimation,false);
这使得动画能够更快地启动 - 并且在动画失败之前让更多动画工作 - 但它没有解决问题 - setInterval
仍在运行并且在某些情况下无限制地执行空白运行次数。
然后我发现因为动画发生在实时nodelist
...可能是脚本的 next 部分(删除)来自nodelist
)的元素过早开始,setInterval
仍在尝试处理文档中不再存在的nodelist
元素。
我的解决方案是在脚本的下一部分开始之前增加setTimeOut
以创建更大的延迟,但还添加额外的clearInterval
作为顶线在setInterval
中运行的脚本:
if ((i + 1) > elements.length) {clearInterval(enterHashtag);}
这样,如果计数器到达setInterval
的初始长度的末尾,nodelist
不仅会自行清除,而且如果下一个,它也会自行清除脚本的一部分刚刚从nodelist
setInterval
即将开始工作的元素中移除。