Der Versuch, einen sehr einfachen Javascript-Countdown zu erstellen. Wenn die Registerkarte jedoch inaktiv ist, beginnt der Countdown zu verzögern und enthält eine falsche Anzahl.Countdown-Timer 'Verzögerungen' wenn Registerkarte inaktiv ist?
Siehe hier jsfiddle zum Beispiel: https://jsfiddle.net/gbx4ftcn/
function initTimer(t) {
var self = this,
timerEl = document.querySelector('.timer'),
minutesGroupEl = timerEl.querySelector('.minutes-group'),
secondsGroupEl = timerEl.querySelector('.seconds-group'),
minutesGroup = {
firstNum: minutesGroupEl.querySelector('.first'),
secondNum: minutesGroupEl.querySelector('.second')
},
secondsGroup = {
firstNum: secondsGroupEl.querySelector('.first'),
secondNum: secondsGroupEl.querySelector('.second')
};
var time = {
min: t.split(':')[0],
sec: t.split(':')[1]
};
var timeNumbers;
function updateTimer() {
var timestr;
var date = new Date();
date.setHours(0);
date.setMinutes(time.min);
date.setSeconds(time.sec);
var newDate = new Date(date.valueOf() - 1000);
var temp = newDate.toTimeString().split(" ");
var tempsplit = temp[0].split(':');
time.min = tempsplit[1];
time.sec = tempsplit[2];
timestr = time.min + time.sec;
timeNumbers = timestr.split('');
updateTimerDisplay(timeNumbers);
if (timestr === '0000')
countdownFinished();
if (timestr != '0000')
setTimeout(updateTimer, 1000);
}
function animateNum(group, arrayValue) {
TweenMax.killTweensOf(group.querySelector('.number-grp-wrp'));
TweenMax.to(group.querySelector('.number-grp-wrp'), 1, {
y: -group.querySelector('.num-' + arrayValue).offsetTop
});
}
setTimeout(updateTimer, 1000);
}
Ich bin nicht sicher, ob das Problem mit der Animation liegt, oder mit dem JS-Code selbst.
Zur Verdeutlichung: Ich möchte, dass der Countdown fortgesetzt wird, wenn die Registerkarte inaktiv ist, oder um "mit sich selbst aufzuholen", wenn die Registerkarte wieder in den Fokus kommt.
Ich weiß, dass setTimeout
und setInterval
Probleme mit inaktiven Tabs verursachen können, aber ich bin mir nicht ganz sicher, wie Sie das beheben können.
Jede Hilfe wäre sehr willkommen!
Bitte entfernen Sie jeglichen Code, der für das spezifische Problem nicht relevant ist. – charlietfl
Mögliches Duplikat von [Warum verzögert sich JavaScript setTimeout in einem anderen Tab?] (Http: // stackoverflow.com/questions/19328140/why-does-javascript-settimeout-lag-wenn-in-einemanderen-tab) –
hinweis: endzeit speichern als datum und immer berechnen basierend auf unterschied zwischen jetzt und ende – charlietfl