javascript - 计时器未正常运行 - Javascript
问题描述
我很抱歉问这个问题。我对 Javascript 比较陌生。我在构建倒数计时器方面得到了帮助,但它突然分成两部分运行。我可能做错了什么?我想我错过了一个小细节,但我就是找不到。请问有什么问题。
$("#coinbtn1").click(function() {
var fiveMinutes = 60 * 5,
display = document.querySelector('#time1');
startTimer1(fiveMinutes, display);
});
function startTimer1(duration, display) {
var timer = duration,
minutes, seconds;
var intervalFn = function() {
minutes = parseInt(timer / 60, 10)
seconds = parseInt(timer % 60, 10);
minutes = minutes < 10 ? "0" + minutes : minutes;
seconds = seconds < 10 ? "0" + seconds : seconds;
display.textContent = minutes + ":" + seconds;
if(--timer != 0){
document.getElementById('coinbtn1').disabled = true;
}
if (--timer === 0) {
clearInterval(myVar);
document.getElementById('coinbtn1').disabled = false;
}
};
myVar = setInterval(intervalFn, 1000);
intervalFn();
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="mdl-card__actions mdl-card--border">
<div>Timer : <span id="time1">05:00</span></div>
<div class="mdl-grid">
<div class="mdl-layout-spacer"></div>
<button id="coinbtn1" class="mdl-button mdl-js-button mdl-js-ripple-effect mdl-button--raised mdl-button--colored">
50 coins
</button>
<div class="mdl-layout-spacer"></div>
</div>
</div>
请帮忙。
解决方案
问题是您有两个在其条件if
中使用的语句。--timer
--timer
timer
无论if
条件是否true
存在(--
是“减量”运算符) ,都会导致减少。
相反,只需检查timer-1
(不会导致timer
修改),然后在这两个测试之后手动减少一次计时器。
$("#coinbtn1").click(function() {
var fiveMinutes = 60 * 5,
display = document.querySelector('#time1');
startTimer1(fiveMinutes, display);
});
function startTimer1(duration, display) {
var timer = duration, minutes, seconds;
var intervalFn = function() {
minutes = parseInt(timer / 60, 10)
seconds = parseInt(timer % 60, 10);
minutes = minutes < 10 ? "0" + minutes : minutes;
seconds = seconds < 10 ? "0" + seconds : seconds;
display.textContent = minutes + ":" + seconds;
// Don't decrease the timer in the test
if(timer-1 != 0){
document.getElementById('coinbtn1').disabled = true;
}
// Don't decrease the timer in the test
if (timer-1 === 0) {
clearInterval(myVar);
document.getElementById('coinbtn1').disabled = false;
}
--timer; // Decrease the counter just once.
}
myVar = setInterval(intervalFn, 900);
intervalFn();
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="mdl-card__actions mdl-card--border">
<div>Timer : <span id="time1">05:00</span></div>
<div class="mdl-grid">
<div class="mdl-layout-spacer"></div>
<button id="coinbtn1" class="mdl-button mdl-js-button mdl-js-ripple-effect mdl-button--raised mdl-button--colored">50 coins</button>
<div class="mdl-layout-spacer"></div>
</div>
</div>
推荐阅读
- c# - Console 类方法的区别
- react-native - 如何修复 react-native-navigation 中的 redux 身份验证?
- javascript - 从 Google 电子表格中读取和写入日期
- continuous-integration - 如何在 30 天后删除 GitLab-CI 作业
- inno-setup - 如何在 Inno Setup 中使用 UTC
- ios - 使用 UICollectionViewController 重新排序的嵌套控制器
- swift - Firebase观察重复数据?
- android - 如何在 android RatingBar 上将“9/10”设置为“4.5/5”?
- list - Powerapps 悬念列表项错误等待括号关闭发现错误
- javascript - 如何在多列div中获取列索引