繁体   English   中英

setInterval倒计时太快

[英]Countdown with setInterval going too fast

有人可以帮我吗,我想知道如何做到这一点,这样每次点击时倒数都不会更快? 我假设间隔很清楚,但是不确定我需要输入什么。 谢谢

 var cD = 100; function countDown() { if (cD > 0) { cD -= 1; $(".countdown").html(cD +"s"); } } $(".countdown-trigger").click(function(){ cD = 100; setInterval(countDown, 10); }); 
 .countdown-trigger { height: 50px; width: 100px; background-color: blue; } .countdown { font-family: "Teko", sans-serif; font-size: 100px; line-height: 100px; } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div class="countdown"> </div> <div class="countdown-trigger"> </div> 

问题是因为您永远不会清除每次连续单击的前一个超时,因此,在单击3次之后,您将拥有三个计时器,每10ms都会减小该值。

要解决此问题,请在cD达到0时调用clearTimeout() 还要注意,您将需要一种机制来防止在前一个间隔仍在运行时启动多个间隔,否则您将遇到相同的问题。 为此,您可以使用布尔标志。 尝试这个:

 var cD = 100, interval, running = false; function countDown() { if (cD > 0) { cD -= 1; $(".countdown").html(('00' + cD).slice(-2) + "s"); } else { clearInterval(interval); running = false; } } $(".countdown-trigger").click(function() { if (running) return; cD = 100; running = true; interval = setInterval(countDown, 10); }); 
 .countdown-trigger { height: 50px; width: 100px; background-color: blue; } .countdown { font-family: "Teko", sans-serif; font-size: 100px; line-height: 100px; } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div class="countdown"></div> <div class="countdown-trigger"></div> 

 var cD = 100; var myOtherVar; function countDown() { if (cD > 0) { cD -= 1; $(".countdown").html(cD +"s"); } else { clearInterval(myOtherVar); } } $(".countdown-trigger").click(function(){ cD = 100; myOtherVar = setInterval(countDown, 10); }); 
 .countdown-trigger { height: 50px; width: 100px; background-color: blue; } .countdown { font-family: "Teko", sans-serif; font-size: 100px; line-height: 100px; } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div class="countdown"> </div> <div class="countdown-trigger"> </div> 

你是对的。 您只需要清除间隔即可。 每次您单击该区域时,它都会设置另一组事件,每10ms发生一次,这就是为什么它会越来越快的原因。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM