Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Наши скрипты > Минутные счетчики с корректным временем


Автор: ksnk 11.2.2013, 11:43
На сайтах часто встречаются разные счетчики, которые показывают  какое-то там время, оставшееся до очередной даты. Все в них достаточно очевидно, кроме того, что они, как правило, просто поставлены на интервал тикают как получится, а не точно в 00 секунд каждой минуты. Чтобы получить иллюзию корректности счетчика, его выставляют часто, чуть ли не каждую секунду.

Мне захотелось получить счетчик, который "тикал" бы именно в 0 секунд каждой минуты, при этом  вызываясь не чаще ( за исключением старта ;) ) раза в минуту. Вот рецепт:

Код

//эта функция будет вызываться каждую минуту
function calc () {
    var now = new Date(),
...
// тут делается то, что положено делать раз в минуту
...
//коррекция таймаута
    var sec=now.getSeconds();
    if(sec>2 && sec <58) { // при перекосе времени на 2 секунды - корректируем таймаут.
         if(calc.interval)clearInterval(calc.interval);
        calc.interval=0;
        setTimeout(calc,1000*(60-now.getSeconds()));
    } else if(!calc.interval){
        calc.interval=setInterval(calc,60000);
    }
}

calc(); // стартуем функцию первый раз


 calc.interval здесь используется, чтобы не генерировать очередную глобальную переменную.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)