我正在用js制作一个秒表,但是我的毫秒看起来不对,就像它显示了错误的东西一样。以为我的编辑器出了问题,但在 repl.it 上看起来是一样的......我认为秒是以毫秒或其他形式显示的。
var startTimerButton = document.querySelector('.startTimer');
var pauseTimerButton = document.querySelector('.pauseTimer');
var timerDisplay = document.querySelector('.timer');
var startTime;
var updatedTime;
var difference;
var tInterval;
var savedTime;
var paused = 0;
var running = 0;
function startTimer() {
if (!running) {
startTime = new Date().getTime();
tInterval = setInterval(getShowTime, 1);
paused = 0;
running = 1;
startTimerButton.style.cursor = "auto";
pauseTimerButton.style.cursor = "pointer";
}
}
function pauseTimer() {
if (!difference) {
// if timer never started, don't allow pause button to do anything
} else if (!paused) {
clearInterval(tInterval);
savedTime = difference;
paused = 1;
running = 0;
pauseTimerButton.classList.add('lighter');
startTimerButton.style.cursor = "pointer";
pauseTimerButton.style.cursor = "auto";
} else {}
}
function resetTimer() {
document.location.reload();
}
function getShowTime() {
updatedTime = new Date().getTime();
if (savedTime) {
difference = (updatedTime - startTime) + savedTime;
} else {
difference = updatedTime - startTime;
}
var hours = Math.floor((difference % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
var minutes = Math.floor((difference % (1000 * 60 * 60)) / (1000 * 60));
var seconds = Math.floor((difference % (1000 * 60)) / 1000);
var milliseconds = Math.floor((difference % (1000 * 60)) / 100);
hours = (hours < 10) ? "0" + hours : hours;
minutes = (minutes < 10) ? "0" + minutes : minutes;
seconds = (seconds < 10) ? "0" + seconds : seconds;
milliseconds = (milliseconds < 100) ? (milliseconds < 10) ? "00" + milliseconds : "0" + milliseconds : milliseconds;
timerDisplay.innerHTML = hours + ':' + minutes + ':' + seconds + ':' + milliseconds;
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.13.1/css/all.min.css" rel="stylesheet" />
<h1>Stopwatch</h1>
<div class="timer">00:00:00:00</div>
<div class="startTimer reset" onclick="startTimer()"> Start
<i class="fas fa-play"></i>
</div>
<div class="pauseTimer reset" onclick="pauseTimer()"> Stop
<i class="fas fa-pause"></i>
</div>
<div class="resetTimer reset" onclick="resetTimer()">Reset</div>
最佳答案
您对毫秒
的计算是错误的。由于差异
是总毫秒数,因此要获得结果的毫秒部分,您只需取1000
的模即可。
var milliseconds = difference % 1000;
var startTimerButton = document.querySelector('.startTimer');
var pauseTimerButton = document.querySelector('.pauseTimer');
var timerDisplay = document.querySelector('.timer');
var startTime;
var updatedTime;
var difference;
var tInterval;
var savedTime;
var paused = 0;
var running = 0;
function startTimer() {
if (!running) {
startTime = new Date().getTime();
tInterval = setInterval(getShowTime, 1);
paused = 0;
running = 1;
startTimerButton.style.cursor = "auto";
pauseTimerButton.style.cursor = "pointer";
}
}
function pauseTimer() {
if (!difference) {
// if timer never started, don't allow pause button to do anything
} else if (!paused) {
clearInterval(tInterval);
savedTime = difference;
paused = 1;
running = 0;
pauseTimerButton.classList.add('lighter');
startTimerButton.style.cursor = "pointer";
pauseTimerButton.style.cursor = "auto";
} else {}
}
function resetTimer() {
document.location.reload();
}
function getShowTime() {
updatedTime = new Date().getTime();
if (savedTime) {
difference = (updatedTime - startTime) + savedTime;
} else {
difference = updatedTime - startTime;
}
var hours = Math.floor((difference % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
var minutes = Math.floor((difference % (1000 * 60 * 60)) / (1000 * 60));
var seconds = Math.floor((difference % (1000 * 60)) / 1000);
var milliseconds = difference % 1000;
hours = (hours < 10) ? "0" + hours : hours;
minutes = (minutes < 10) ? "0" + minutes : minutes;
seconds = (seconds < 10) ? "0" + seconds : seconds;
milliseconds = (milliseconds < 100) ? (milliseconds < 10) ? "00" + milliseconds : "0" + milliseconds : milliseconds;
timerDisplay.innerHTML = hours + ':' + minutes + ':' + seconds + ':' + milliseconds;
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.13.1/css/all.min.css" rel="stylesheet" />
<h1>Stopwatch</h1>
<div class="timer">00:00:00:00</div>
<div class="startTimer reset" onclick="startTimer()"> Start
<i class="fas fa-play"></i>
</div>
<div class="pauseTimer reset" onclick="pauseTimer()"> Stop
<i class="fas fa-pause"></i>
</div>
<div class="resetTimer reset" onclick="resetTimer()">Reset</div>
关于javascript - 为什么我的毫秒在 js 秒表中看起来不对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62882874/