尽管有几种方法,但无法让 clearInterval 工作
Can't get clearInterval to work, despite several approaches
我有以下 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 到 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
的值,尝试在每次迭代时显示这些变量
原来答案在别处,在脚本的更下方 - 为了完整起见,我将把它包括在内。
从各种测试来看,错误似乎与脚本执行速度有关。该脚本控制页面加载时发生的快速动画,因此我将事件侦听器从
更改为
window.addEventListener('load',activateAnimation,false);
至
window.addEventListener('DOMContentLoaded',activateAnimation,false);
这使动画能够更快地开始 - 并在它失败之前让更多的动画工作 - 但它没有解决问题 - setInterval
仍然是 运行 并且出现空白运行一定次数后无限。
然后我想到 因为 动画是在直播中进行的 nodelist
...也许 下一个 脚本的一部分(从 nodelist
中删除了元素)开始得太早,导致 setInterval
仍在尝试处理文档中不再存在的 nodelist
元素。
我的解决方案是增加 setTimeOut
以在脚本的下一部分开始之前创建更大的延迟,但是 也 添加额外的 clearInterval
作为 setInterval
:
中脚本 运行 的第一行
if ((i + 1) > elements.length) {clearInterval(enterHashtag);}
这样,不仅 setInterval
会在计数器到达 nodelist
初始长度的末尾时自行清除,而且 也会自行清除脚本的下一部分 刚刚从nodelist
中删除了setInterval
即将开始处理的元素。
我有以下 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 到 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
的值,尝试在每次迭代时显示这些变量
原来答案在别处,在脚本的更下方 - 为了完整起见,我将把它包括在内。
从各种测试来看,错误似乎与脚本执行速度有关。该脚本控制页面加载时发生的快速动画,因此我将事件侦听器从
更改为window.addEventListener('load',activateAnimation,false);
至
window.addEventListener('DOMContentLoaded',activateAnimation,false);
这使动画能够更快地开始 - 并在它失败之前让更多的动画工作 - 但它没有解决问题 - setInterval
仍然是 运行 并且出现空白运行一定次数后无限。
然后我想到 因为 动画是在直播中进行的 nodelist
...也许 下一个 脚本的一部分(从 nodelist
中删除了元素)开始得太早,导致 setInterval
仍在尝试处理文档中不再存在的 nodelist
元素。
我的解决方案是增加 setTimeOut
以在脚本的下一部分开始之前创建更大的延迟,但是 也 添加额外的 clearInterval
作为 setInterval
:
if ((i + 1) > elements.length) {clearInterval(enterHashtag);}
这样,不仅 setInterval
会在计数器到达 nodelist
初始长度的末尾时自行清除,而且 也会自行清除脚本的下一部分 刚刚从nodelist
中删除了setInterval
即将开始处理的元素。