gpt4 book ai didi

javascript - setTimeout 之前的clearInterval 不起作用

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

我在清除间隔时遇到问题。我有 3 个函数 start1start2start3。在这里您只能看到第一个。函数 count1 和变量 myVar1 具有相同的原理,它们具有相同的编号。现在的问题是 clearInterval 仅在第一个函数之后起作用(请参阅控制台日志)。在第二个 start2() 之后,发生了我自己无法解释的事情。我做了一个demo .

start1();

function start1() {
var valuem = 0, dir = 1;
$('#number').text(valuem);

function count1() {
valuem += dir;
$('#number').text(valuem);
if (valuem < 1) dir = 1;
console.log("start1");
}

$("body").on({
'touchstart mousedown': function(e) {
if ($('#number').text() == 5) {
window.clearInterval(myVar1);
window.setTimeout(function() {
start2();
}, 1000);
}
},
'touchend mouseup': function(e) {}
});

var myVar1 = window.setInterval(function() {
count1();
}, 1000);
}

控制台日志:

5 start1

6 start2

start3

start2

start3

start2

最佳答案

您的代码在第二个函数调用后出错的原因是您在调用下一个函数时没有取消设置 mousedown touchstart 事件。因此,当您运行第二个函数时,您在 body 上有 2 个事件监听器,并且它们都有效。这会导致问题。

因此,当您调用下一个事件监听器时,请取消设置事件监听器。

$("body").on({
'touchstart mousedown': function(e) {
if (parseInt($('#number').text()) >= 5) {
$(e.target).off('touchstart mousedown');
window.clearInterval(myVar1);
window.setTimeout(function() {
start2();
}, 1000);
}
}
});

上面的代码使用 >=5 而不是原始代码 $('#number').text() == 5 以便轻松检查它的方式有效。

关于javascript - setTimeout 之前的clearInterval 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36837166/

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