我目前正在使用秒表应用程序,您可以在其中设置值(以分钟,秒和小时为单位),它会倒计时直至达到零。问题在于它只会掉一秒钟然后完全停止工作。这是什么问题?
let hours = document.getElementById('hours')
let mins = document.getElementById('minutes')
let secs = document.getElementById('seconds')
let submit = document.getElementById('submit')
let time = document.getElementById('time')
let runningProgramKey = null;
submit.addEventListener('click', startTimer)
function startTimer() {
//window.variable is not a flaw, I am using it to define a global variable inside the function
window.hoursX = Math.abs(parseInt(hours.value)) || 0;
window.minsX = Math.abs(parseInt(mins.value)) || 0
window.secsX = Math.abs(parseInt(secs.value)) || 0
window.timeX = `${hoursX}:${minsX}:${secsX}`
time.textContent = timeX;
runTime();
}
function runTime() {
if (runningProgramKey) clearInterval(runningProgramKey);
runningProgramKey = setInterval(() => {
time.textContent = updateTime(hoursX,minsX,secsX);
},1000)
}
function updateTime(hours,minutes,seconds) {
//I know I can use ternary operators however I am not (for a reason)
if (seconds - 1 > 0) {
seconds--;
if (minutes >= 1 && seconds === 0) {
minutes--;
}
}
return `${hours}:${minutes}:${seconds}`;
}
function clearTime() {
}
<!DOCTYPE html>
<html>
<head>
<title>StopwatchApp</title>
<script defer src='script.js'></script>
</head>
<body>
<div>
<input id='hours' type='text' placeholder="Hours">
<input id='minutes' type='text' placeholder="Minutes">
<input id='seconds' type='text' placeholder="Seconds">
<input id='submit' type='button' value='Go'>
</div>
<h1 id='time'>HH:MM:SS</h1>
</body>
</html>
仅是为了澄清和节省人们的时间,该错误不是if (runningProgramKey) clearInterval(runningProgramKey);
我知道,因为我做了很多事情,甚至注释了该行,但错误仍然存在。
要查看发生的情况的可视化,请按run snippet
,该代码应在我的代码下。它为您提供了关于问题所在的另一个清晰思路。
我的代码尚未完成,因此某些功能会受到质疑,例如,秒数从0停止。这不是一个完整的脚本,我来获得有关错误的帮助,以便我可以继续从事该项目我不喜欢的事实是,“评论”部分中的人并不仅仅是承认并抱怨此事。下一次,请先尝试确定问题的根源,然后再尝试在评论部分发布公告。我不是在“想要”帮助的人上“保证”,我不是在半读问题并想要尝试侮辱我的代码的人“保证”,即使他们知道代码不完整。
答案 0 :(得分:0)
当您将数字作为参数传递给函数时,会在堆栈中创建参数的副本,如果您更改变量,则变量的副本将更改而原始变量不会更改。
您应该使用全局变量。
function updateTime() {
//I know I can use ternary operators however I am not (for a reason)
if (secsX- 1 > 0) {
secsX--;
if (minsX>= 1 && secsX=== 0) {
minsX--;
}
}
return `${hoursX}:${minsX}:${secsX}`;
}