Destio

Самоподстраивающийся таймер в JavaScript

Небольшой таймер на смеси AngularJS и JavaScript, требует инжекта $timeout(), который есть setTimeout() + $apply() . Ежесекундный таймер бы вполне сработал и с $interval(), но на будущее пригодится и подстраивающийся.

Заодно есть и стоп-функция, а то просто так рекурсивный setTimeout() не остановить.

$scope.revenue = {
    time: 0, 
    increment: function() {
        $scope.revenue.time += 1;
        if (timerGo === true) {
            timeDifference = Date.now() - timerBegin - $scope.revenue.time * 1000;
            if (timeDifference > 980) {timeDifference = 980;}
            timerLoop = $timeout($scope.revenue.increment, 1000 - timeDifference);
        }
    },
}

var timerGo;
var timerBegin;
var timerLoop;

$scope.revenue.timerStart = function() {
    if (angular.isDefined(timerLoop)) return;
    timerGo = true;
    timerBegin = Date.now() - $scope.revenue.time * 1000 ;
    timerLoop = $timeout(this.increment, 1000);
}

$scope.revenue.timerStop = function() {
    if (angular.isDefined(timerLoop)) {
        $timeout.cancel(timerLoop);
        timerLoop = undefined;
        timerBegin = undefined
        timerGo = false;
    }
}

Ярлыки: ,


Ближайшие сообщения:

Похожие сообщения:

Комментарии к этой записи отключены.