gpt4 book ai didi

javascript - 如何清除函数中的 setInterval

转载 作者:行者123 更新时间:2023-12-04 07:25:34 25 4
gpt4 key购买 nike

你好,我有问题。
有谁知道,为什么我的“clearInterval”在点击后不起作用?

"use strict";
let activeCount = 0;
let switcher = document.getElementById("counter__switcher");
let counter = document.getElementById("counter__number");

counter.innerText = "0";
let parsed = parseInt(counter.innerText);

switcher.addEventListener("click", function(e) {
if(activeCount == 0) {
counter.classList.toggle("d-block");
e = setInterval(function() {
counter.innerText = parsed++;
},1000)
activeCount = 1;
console.log(activeCount)
}
else {
window.clearInterval(e);
}
})

最佳答案

你在这里做错了很多事情。
首先是变量 e将事件数据存储在(如点击的坐标)中,因此您不应重新分配它以携带另一个不相关的值。其次,由于您是在回调函数中访问它,因此您需要记住两件事,首先,包含超时的变量应该是全局的,不应分配其他值。
在您的示例中,变量 e一旦函数完成,包含超时将被销毁/垃圾收集。当回调函数再次运行时,变量e携带事件对象,而不是可以传递给 clearInterval 的超时。
要做到这一点,请使用 let someTimeout; 正确声明一个全局变量并为其分配值或相应地在回调函数中调用 clearInterval 。
这是一个编辑过的例子:

"use strict";
let activeCount = 0;
let switcher = document.getElementById("counter__switcher");
let counter = document.getElementById("counter__number");
let myTimeout;

counter.innerText = "0";
let parsed = parseInt(counter.innerText);

switcher.addEventListener("click", function(e) {
if(activeCount == 0) {
counter.classList.toggle("d-block");
myTimeout = setInterval(function() {
counter.innerText = parsed++;
},1000)
activeCount = 1;
console.log(activeCount)
}
else {
window.clearInterval(myTimeout);
}
})

关于javascript - 如何清除函数中的 setInterval,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68235457/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com