gpt4 book ai didi

javascript - 有一个可以计算秒和毫秒的计时器

转载 作者:行者123 更新时间:2023-11-28 06:23:10 24 4
gpt4 key购买 nike

大家好,我有一个简单的问题。基本上我需要一个可以计算秒和毫秒的计时器。我已经构建了一个以秒为单位倒计时的计时器,但在添加毫秒函数时遇到了一些麻烦。当我尝试添加第二个计时器并将其放在第一个计时器旁边时,它干扰了我的第一个计时器。我做 Java 脚本的时间不长,所以我不知道下一步该做什么。

<!DOCTYPE html>
<html lang="en">

<head>
<meta charset="UTF-8">
<title>Document</title>
</head>

<body id="body">

<div id="timer" style="font-family:helvetica; font-size:100px; text-align:center;">24 secs</div>
<script>
var count = 24,
counter = setInterval(timer, 1000),
running = true;

function timer() {
count -= 1;
if (count <= 0) {
clearInterval(counter);
}
document.getElementById("timer").innerHTML = count + " secs";
}
window.addEventListener("keydown", function(e) {
switch (e.keyCode) {
case 32: // PLAY
running ? clearInterval(counter) : counter = setInterval(timer, 1000);
running = !running;
break;
case 82: // RESET
clearInterval(counter);
document.getElementById("timer").innerHTML = 24 + " secs";
count = 24;
running = false;
}
});
</script>
</body>

</html>

最佳答案

这个问题并不像乍一看那么简单。

您无法真正毫秒显示一次,因为浏览器无法处理它。

如果对旧浏览器(比如 2012 年之前)的支持不是问题,我会使用这样的东西:

var count = 24000,
running = true,
secondsNode = document.getElementById("seconds"),
millisecondsNode = document.getElementById("milliseconds"),
mOld,
mNew;

function draw() {
if (count > 0 && running) {
requestAnimationFrame(draw);
mNew = new Date().getTime();
count = count - mNew + mOld;
count = count >= 0 ? count : 0;
mOld = mNew;
secondsNode.innerHTML = Math.floor(count / 1000);
millisecondsNode.innerHTML = count % 1000;
}
}
mOld = new Date().getTime();
draw();

window.addEventListener("keydown", function(e) {
switch (e.keyCode) {
case 32: // PLAY
if (running) {
running = false;
} else {
running = true;
mOld = new Date().getTime();
draw();
}
break;
case 82: // RESET
count = 24000;
secondsNode.innerHTML = 24;
millisecondsNode.innerHTML = 0;
running = false;
}
});
p {
font-family: helvetica;
font-size: 100px;
text-align: center;
}
<body id="body">

<p><span id="seconds">24</span> secs and <span id="milliseconds">000</span> milliseconds</p>

</body>

这里的核心是方法requestAnimationFrame(...);。简而言之,它是一个原生 JS 方法,一旦浏览器准备好“绘制”新框架,就会执行作为参数提供的函数

由于我们不知道自上次执行以来已经过去了多少时间,因此我们需要使用与 datetime 相关的当前 datetime我们的方法最后执行


旁注:

经常需要的节点应该保存到变量中,而不是在每次需要时“计算”。 (secondsNode = document.getElementById(...) 可以节省资源,因为文档只需遍历 一次。)

Here some further reading on requestAnimationFrame.

And the above code as a Fiddle.

关于javascript - 有一个可以计算秒和毫秒的计时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35344955/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com