我试图让两件事同时发生,但只允许其中一件。如果已经发生了某些事情,我需要能够完全阻止它并让另一个接管。这是我的例子:
https://jsfiddle.net/mortenmoulder/5eceLvgu/
function log(text, interval, amount) {
(function myLoop(i) {
timer = setTimeout(function() {
console.log(text);
if (--i) myLoop(i);
}, interval)
})(amount);
}
$("#first").on("click", () => log("first", 500, 10));
$("#second").on("click", () => log("second", 500, 10));
点击第一个按钮,它将console.log("first")
10次,延迟时间为500毫秒。当您单击第二个按钮时,它应该取消第一个按钮并启动console.log("second")
而不会被中断(除非您单击第一个按钮)。
我该怎么做?我需要延迟循环,我需要有一个函数来执行此操作(因此,每个按钮的if语句不多,因为有很多按钮)。
答案 0 :(得分:2)
如果拨打log
:
var logTimer;
function log(text, interval, amount) {
clearTimeout(logTimer);
(function myLoop(i) {
logTimer = setTimeout(function() {
console.log(text);
if (--i) myLoop(i);
}, interval)
})(amount);
}
答案 1 :(得分:0)
您已经存储了计时器,因此您可以清除其超时。
https://jsfiddle.net/5eceLvgu/1/
var timer;
function log(...)
clearTimeout(timer);
(function myLoop(i) {