(извините за мой плохой английский)
У меня была та же проблема с функцией обратного отсчета, я написал функцию countdown () и цикл с setInterval, но его дрейф 1-3 миллисекунды на цикл. Затем я пишу функцию, которая контролирует наличие дрейфа и исправляет ее.
Контролирует только с реальными минутами и секундами. Вот. Это прекрасно работает для меня, я надеюсь, что это поможет вам тоже.
$.syncInterval(functionname,interval,controlinterval)
пример:
countdown(){ some code };
$.syncInterval(countdown,1000,60);
он говорит, что запускает функцию обратного отсчета каждые 1000 миллисекунд и проверяет ее каждые 60 секунд
вот код:
$.syncInterval = function (func,interval,control) {
var
now=new Date();
realMinute=now.getMinutes(),
realSecond=now.getSeconds(),
nowSecond=realSecond,
nowMinute=realMinute,
minuteError=0,
countingVar=1,
totalDiff=0;
var loopthat = setInterval(function(){
if (nowSecond==0) {
nowMinute++;
nowMinute=nowMinute%60;
};
if (countingVar==0){
now=new Date();
realSecond=now.getSeconds();
realMinute=now.getMinutes();
totalDiff=((realMinute*60)+(realSecond))-((nowMinute*60)+(nowSecond));
if(totalDiff>0){
for (i=1;i<=totalDiff;i++) {
func();
nowSecond++;
countingVar++;
};
} else if (totalDiff==0){
func();
nowSecond++;
countingVar++;
} else if (totalDiff<0) {
};
} else {
func();
nowSecond++;
countingVar++;
};
countingVar=countingVar%control;
nowSecond=nowSecond%60;
},interval);
};