2016-12-01 23 views
0

私は時間を表示するビューに$rootScope.Minutes$rootScope.Secondsを使用していますタイマーインターバル時間の設定方法は?

function startTimer(duration) { 
     $rootScope.timer = duration; 
     $rootScope.minute = 0; 
     $rootScope.second = 0; 
     $rootScope.Minutes = 0; 
     $rootScope.Seconds = 0; 
     setInterval(function() { 
      $rootScope.minute = parseInt($rootScope.timer/60, 10) 
      $rootScope.second = parseInt($rootScope.timer % 60, 10); 
      $rootScope.Minutes = $rootScope.minute < 10 ? "0" + 
      $rootScope.minute : $rootScope.minute; 
      $rootScope.Seconds = $rootScope.second < 10 ? "0" + 
      $rootScope.second : $rootScope.second; 
      if (--$rootScope.timer < 0) { 
       $rootScope.timer = duration; 
      } 
     }, 1000); 
    } 

startTimer(300); 

する機能を次のように使用しています。時間は秒単位で減少します。しかし、私がタイマーを閉じて再び開いた場合、それは2秒短縮されます。もう一度閉じると開き、3秒後に減少します。賢明な反復のように。私はどこで間違ったのか分かりません。私を助けてください。

+0

フィドルで完全なコードを投稿してください。 –

答えて

0

startTimerに電話するたびに、別の電話番号setIntervalが発火します。これは単独で実行されます。同じ変数を使用しているため、setIntervalはそれぞれ$rootScope.timer変数で独立して動作します。

解決策は、最初にsetIntervalにハンドルを保存し、新しい間隔を設定する前にclearIntervalに保存することです。

function startTimer(duration) { 
     $rootScope.timer = duration; 
     $rootScope.minute = 0; 
     $rootScope.second = 0; 
     $rootScope.Minutes = 0; 
     $rootScope.Seconds = 0; 

     // modified bit 
     if($rootScope.internvalhandle) clearInterval($rootScope.internvalhandle); 

     $rootScope.internvalhandle = setInterval(function() { 
      $rootScope.minute = parseInt($rootScope.timer/60, 10) 
      $rootScope.second = parseInt($rootScope.timer % 60, 10); 
      $rootScope.Minutes = $rootScope.minute < 10 ? "0" + 
      $rootScope.minute : $rootScope.minute; 
      $rootScope.Seconds = $rootScope.second < 10 ? "0" + 
      $rootScope.second : $rootScope.second; 
      if (--$rootScope.timer < 0) { 
       $rootScope.timer = duration; 
      } 
     }, 1000); 
    } 

startTimer(300); 
+0

ありがとうございます。 –

関連する問題