gpt4 book ai didi

javascript - 不使用 Date.getTime() 的秒表 javascript

转载 作者:行者123 更新时间:2023-11-29 10:15:27 25 4
gpt4 key购买 nike

作为一个 java script 初学者,我想尝试写秒表代码,我写了以下代码:

<!DOCTYPE html>
<html>
<body>
<p>A script on this page starts a stopwatch:</p>
<p id="demo"></p>

<button id="start-stop" onclick="myTimerFunction()">Start time</button>
<button id="resetter" style="visibility:hidden" onclick="resetTimer()">Reset</button>

<script>
var timer = new Object();
timer.hours = 0;
timer.minutes = 0;
timer.seconds = 0;
timer.milliseconds = 0;
timer.add = add;
function add() {
timer.milliseconds+=10;
if(timer.milliseconds == 1000) {
timer.seconds++;
timer.milliseconds = 0;
}
if(timer.seconds == 60) {
timer.minutes++;
timer.seconds = 0;
}
if(timer.minutes == 60) {
timer.hours++;
timer.minutes = 0;
}
}
timer.display = display;
function display () {
var str = "";
if(timer.hours<10) {
str += "0";
}
str += timer.hours;
str += ":";
if(timer.minutes<10) {
str += "0";
}
str += timer.minutes;
str += ":";
if(timer.seconds<10) {
str += "0";
}
str += timer.seconds;
str += ":";
/*var x = timer.milliseconds/10;
if(x < 10) {
str += "0";
}*/
if(timer.milliseconds<10) {
str += "0";
}
if(timer.milliseconds<100) {
str += "0";
}
str += timer.milliseconds;
return str;
}
timer.reset = reset;
function reset() {
timer.hours = 0;
timer.minutes = 0;
timer.seconds = 0;
timer.milliseconds = 0;
}

var myVar;
function start() {
timer.add();
var d = new Date();
var t = d.toLocaleTimeString();
document.getElementById("demo").innerHTML = timer.display() + "\t" + t;
}

function stop() {
clearInterval(myVar);
}

function resetTimer() {
stop();
timer.reset();
document.getElementById("demo").innerHTML = timer.display();
document.getElementById("start-stop").innerHTML="Start time";
document.getElementById("resetter").style.visibility="hidden";
}

function myTimerFunction() {
var x = document.getElementById("start-stop");
if(x.innerHTML.match("Start time")) {
document.getElementById("resetter").style.visibility="visible";
myVar = setInterval(function(){start()},10);
x.innerHTML="Stop time";
}
else if(x.innerHTML.match("Stop time")) {
stop();
x.innerHTML="Start time";
}
}
</script>
</body>
</html>

但是,问题是当我将 delay 放入 setInterval(func,delay) 时 < strong>1 并进行相应的更改,它没有给出可靠的秒计时。它比普通时钟慢。它为 delay >= 10 提供“某种”可靠的计时。

我在线检查了秒表 js 脚本,但它们都使用某种或其他形式的 Date() 并将“延迟”设置为“50”,我现在不明白为什么。 SO 中有一个不使用 Date() 的答案,但它也有与我相同的问题。我无法在那里发表评论,因为我没有足够的声誉,所以我要问一个问题。

所以,我的问题是:如果我们不使用 Date() 函数,是否无法实现正常的时钟可靠性?否则如果可能的话,请帮助我改进这段代码或者请提供一些指示。

谢谢。

最佳答案

如果没有 getTime,您可以这样做,您真的不应该...

var ms = 0;
var intervalID;

function start() {
var freq = 10; // ms
intervalID = setInterval(function () {
ms += 10;
var myDate = new Date(ms);
document.getElementById('watch').innerHTML = myDate.getUTCHours() + ":" + myDate.getMinutes() + ":" + myDate.getSeconds() +
":" + myDate.getMilliseconds();
}, freq);
}

function stop() {
clearInterval(intervalID);
}

function reset() {
ms = 0;
myDate = new Date(ms);
document.getElementById('watch').innerHTML = myDate.getUTCHours() + ":" + myDate.getMinutes() + ":" + myDate.getSeconds() +
":" + myDate.getMilliseconds();
}

Fiddle

关于javascript - 不使用 Date.getTime() 的秒表 javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23089543/

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