JSFiddle - React, Tailwind, and code Playground
by alicemunro
JavaScript
function CountdownTimer(totalMs, totalTicks, tickCb) {
var ret = {}, startTime, ticksCompleted;
function tick() {
if (ticksCompleted == totalTicks) { onFinish(); return; }
ticksCompleted++;
tickCb(ticksCompleted);
setTimeout(function() {tick()}, optimalPauseTime());
}
function optimalPauseTime() {
var timeElapsed = new Date() - startTime;
var avgTickTimeSoFar = timeElapsed / ticksCompleted;
var ticksRemaining = totalTicks - ticksCompleted;
var timeRemaining = totalMs - timeElapsed;
return timeRemaining / ticksRemaining;
}
function start() {
startTime = new Date();
ticksCompleted = 0;
tick();
}
function onFinish() {
console.log(new Date() - startTime);
}
ret.start = start;
return ret;
}
timer = CountdownTimer(5000, 5, function(tickNum) { console.log(tickNum) });
timer.start();