gpt4 book ai didi

javascript - 多个连续 5 分钟倒数计时器

转载 作者:行者123 更新时间:2023-12-04 07:58:53 28 4
gpt4 key购买 nike

我想制作 3 个倒数计时器,下一个在最后一个结束时开始(第一个计时器将自动开始倒计时,但第二个计时器仅在第一个到达 0:00 时开始,第三个将仅当第二个到达 0:00 时开始)。
我找到了倒数计时器的这段代码:

    function countDown() {
var seconds = 60;
var mins = 5;
function clickClock() {
var counter = document.getElementById("countdown1");
var currentMinutes = mins - 1;
seconds--;
counter.innerHTML = currentMinutes.toString() + ":" + (seconds < 10 ? "0" : "") + String(seconds);
if(seconds > 0) {
setTimeout(clickClock, 1000);
} else {
if(mins > 1) {
countDown(mins-1);
}
}
}
clickClock();
}
countDown();
在我的 HTML 上,我有 3 个跨度,每个跨度都有一个唯一的 ID(#countdown1、#countdown2、#countdown3)
我尝试将一个参数传递给名为 counter 的 clickClock() 函数,这样每当我调用该函数时,我就可以输入我想要影响的元素的 id,但没有奏效。
我可以只创建 2 个其他函数,它们可以做完全相同的事情,但会更改计数器变量,但我想避免在我的代码中重复不必要的事情。
这怎么可能?
任何帮助表示赞赏:)

最佳答案

我会做这样的事情:

/////////// USAGE
const timersDurationInMilliseconds = 1000 * 5; // for 5 minutes do: 1000 * 60 * 5

// Render initial timer content
RenderTimer('countdown1', timersDurationInMilliseconds);
RenderTimer('countdown2', timersDurationInMilliseconds);
RenderTimer('countdown3', timersDurationInMilliseconds);

// Start countdown, then start another ones
countDown(timersDurationInMilliseconds, 'countdown1')
.then(() => countDown(timersDurationInMilliseconds, 'countdown2'))
.then(() => countDown(timersDurationInMilliseconds, 'countdown3'))
.then(() => alert('All timers finished!'));


/////////// REQUIRED METHODS
function countDown(durationInMilliseconds, elementId) {
return new Promise((resolve, reject) => {
const updateFrequencyInMilliseconds = 10;
const currentTimeInMilliseconds = new Date().getTime();
const endTime = new Date(currentTimeInMilliseconds + durationInMilliseconds);

function updateTimer(elementId) {
let timeLeft = endTime - new Date();
if (timeLeft > 0) {
// We're not done yet!
setTimeout(updateTimer, updateFrequencyInMilliseconds, elementId);
} else {
// Timer has finished!
resolve();

// depending on update frequency, timer may lag behind and stop few milliseconds too late
// this will cause timeLeft to be less than 0
// let's reset it back to 0, so it renders nicely on the page
timeLeft = 0;
}

RenderTimer(elementId, timeLeft);
}

updateTimer(elementId);
});
}

function padNumber(number, length) {
return new String(number).padStart(length || 2, '0'); // adds leading zero when needed
}

function RenderTimer(elementId, timeLeft) {
const hoursLeft = Math.floor(timeLeft / 1000 / 60 / 60 % 60);
const minutesLeft = Math.floor(timeLeft / 1000 / 60 % 60);
const secondsLeft = Math.floor(timeLeft / 1000 % 60);
const millisecondsLeft = timeLeft % 1000;

const counterElement = document.getElementById(elementId);
counterElement.innerHTML = `${padNumber(hoursLeft)}:${padNumber(minutesLeft)}:${padNumber(secondsLeft)}.${padNumber(millisecondsLeft, 3)}`;
}
<p>First countdown: <span id="countdown1"></span></p>
<p>Second countdown: <span id="countdown2"></span></p>
<p>Third countdown: <span id="countdown3"></span></p>

如果您只想显示分钟和秒,您可以在 RenderTimer 中调整该行为。方法。
如果您不打算向用户显示毫秒,您可能希望通过调整 updateFrequencyInMilliseconds 来更改计时器在页面上更新和呈现的频率。变量(例如从 10 毫秒到 1000 毫秒)。

关于javascript - 多个连续 5 分钟倒数计时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66568014/

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