我正在尝试使用setInterval()构建jQuery计数器,这个想法是一旦按下一个按钮,计数器应该开始计数,如果按下另一个按钮,则应该停止+重置为零,这个过程应该是可重复,但是即使我的变量集显示false
,我的JS似乎也没有停止计时器。计时器仅在为true
时计数。
$('.start').click(function() {
timer(true)
})
$('.stop').click(function() {
timer(false)
})
let timerShouldCount = false
function timer(timerStatus) {
timerShouldCount = timerStatus
if (timerShouldCount == true ) {
setInterval(function(){
console.log('counting');
}, 1000);
}
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button class="start" type="button">Start</button>
<button class="stop" type="button">Stop</button>
更新
$('.js_ask-later').click(function() {
timer(true)
})
$('.js_close-modal').click(function() {
timer(false)
})
let registerTimer
let timerShouldCount = false
function timer(timerStatus) {
timerShouldCount = timerStatus
if (timerShouldCount == true) {
$('#login-modal').on('hidden.bs.modal', function (e) {
registerTimer = setInterval(function(){
$('#login-modal').modal('show')
}, 5000)
})
} else {
clearInterval(registerTimer)
}
}
答案 0 :(得分:2)
您不会在任何时候清除间隔。为此,您需要参考创建的间隔。
let my_int;
function timer(timerStatus) {
timerShouldCount = timerStatus
if (timerShouldCount == true ) {
my_int = setInterval(function(){
console.log('counting');
}, 1000);
} else
clearInterval(my_int);
}
[编辑]
根据下面的评论,很明显您实际上没有计时器,只是一个间隔。我们需要一个用于计时器的变量。
let my_int, timer = 0;
function timer(timerStatus) {
timerShouldCount = timerStatus
if (timerShouldCount == true ) {
my_int = setInterval(function(){
timer++; //<-- increment
console.log('counting');
}, 1000);
} else {
clearInterval(my_int);
timer = 0; //<-- reset to 0
}
}
您可以使用该计时器执行操作,即在DOM中显示该计时器的方法取决于您,但现在至少您可以看到我们如何将其递增并将其重置为0。