【发布时间】:2020-12-05 19:32:45
【问题描述】:
我正在使用 JavaScript 倒数计时器创建网页,用户可以在其中输入以分钟为单位的时间并启动计时器。我有两个问题。
- 首先,如果不刷新页面,计数器将无法启动。
- 我想在输入新的分钟值并重新按下开始按钮时重置倒计时。目前两个不同的值混合在一起(函数将在不刷新的情况下启动) - 进度条将向后跳到第四个。
var startingMinutes = parseInt(document.getElementById("time").value);
let time = startingMinutes * 60;
console.log(startingMinutes);
console.log(time);
function move() {
console.log(time);
var elem = document.getElementById("myBar");
elem.style.width = 1 + "%";
elem.innerHTML = 1 + "%";
var setTime = document.getElementById("time").value;
var timeVar = 620 * setTime;
if (setTime > 0) {
setInterval(updateCountdown, 1000);
i = 1;
var width = 1;
var id = setInterval(frame, timeVar);
function frame() {
if (width >= 100) {
clearInterval(id);
i = 0;
} else {
width++;
elem.style.width = width + "%";
elem.innerHTML = width + "%";
}
}
}
}
const countdownEl = document.getElementById("clock");
/* function for numeric counter */
function updateCountdown() {
console.log(time);
const minutes = Math.floor(time / 60);
let seconds = time % 60;
seconds = seconds < 10 ? "0" + seconds : seconds;
countdownEl.innerHTML = `${minutes}:${seconds}`;
if (minutes == 0 && seconds == 0) {
return;
}
time--;
}
* {
color: rgb(245, 242, 237);
text-align: center;
font-family: Arial, Helvetica, sans-serif;
box-shadow: 7px 7px 5px #3c3eb3;
background-image: radial-gradient(rgb(87, 87, 230), rgb(33, 36, 20));
}
#myProgress {
width: 100%;
background-color: #ddd;
}
#myBar {
width: 1%;
height: 30px;
background-color: #4caf50;
font-family: Arial, Helvetica, sans-serif;
font-weight: 800;
text-align: center;
line-height: 30px;
background-image: radial-gradient(
rgb(255, 244, 92),
rgb(247, 247, 54),
rgb(85, 79, 23)
);
color: rgb(44, 38, 29);
}
button {
font-size: 3vw;
color: rgb(245, 242, 237);
width: 130px;
height: 130px;
border-radius: 50%;
background-image: radial-gradient(rgb(87, 87, 230), rgb(33, 36, 20));
}
.form {
font-size: 22px;
}
#clock {
font-size: 6vw;
font-weight: 600;
color: rgb(245, 242, 237);
margin: auto;
border-radius: 100%;
background: #4caf50;
background-image: radial-gradient(rgb(87, 87, 230), rgb(33, 36, 20));
width: 260px;
height: 260px;
display: grid;
place-items: center;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<br />
<br />
<p id="clock" class="shadow">TIME</p>
<h1 class="shadow">JavaScript Countdown Timer</h1>
<form action="" id="form" class="shadow">
<label for="" class="form">Minutes:</label>
<input
type="number"
id="time"
value="0"
class="form"
/>
<br />
<div id="myProgress">
<div id="myBar" class="shadow">1%</div>
</div>
<br />
<button onclick="move()" type="button" class="shadow">Start</button>
<br />
<br />
</form>
<br />
</body>
</html>
【问题讨论】:
-
你目前有什么代码?
-
这能回答你的问题吗? How to use setInterval and clearInterval?
-
你到底在哪里卡住了?请提供一个最低限度可重现的示例。
-
当我在浏览器上打开页面时,在文本输入中添加数值并按下开始。然后只有进度条开始移动。但不是 TIME 字段上的数字。
-
数字倒计时仅在页面刷新和第二个按钮单击后开始。
标签: javascript timer countdown clock