2016-12-01 137 views
0

我有使用以下定時器如何設置間隔時間?

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); 

我使用$rootScope.Minutes$rootScope.Seconds在視圖中顯示時間的功能。時間以秒爲單位減少。但如果我關閉計時器並再次打開它會減少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

謝謝..它正在工作。 –