2016-07-30 45 views
3

定時器在每次重置時都會變得越來越快。我想我需要使用clearTimeout,但我不確定如何實施它。下面的代碼:定時器在每次重置時都會變得越來越快

$(function(){ 
    sessionmin = 25; 
    $("#sessionMinutes").html(sessionmin); 
    $("#circle").click(function() { 
    timeInSeconds = sessionmin * 60; 
    timeout(); 
    }); 
}) 

function timeout(){ 
    setTimeout(function() { 
    if (timeInSeconds > 0) { 
     timeInSeconds -= 1; 
     hours = Math.floor(timeInSeconds/3600); 
     minutes = Math.floor((timeInSeconds - hours*3600)/60); 
     seconds = Math.floor(timeInSeconds - hours*3600 - minutes*60); 
     $("#timer").html(hours + ":" + minutes + ":" + seconds); 
    } 
    timeout(); 
    }, 1000); 
} 
+0

,你添加一個新的自我調用超時 –

回答

0

你必須定義你setTimeout作爲變量進行復位。

See Fiddle

每次點擊一次
var thisTimer;  // Variable declaration. 
$(function(){ 
     sessionmin = 25; 
     $("#sessionMinutes").html(sessionmin); 
     $("#circle").click(function(){ 
      clearTimeout(thisTimer);  // Clear previous timeout 
      timeInSeconds = sessionmin * 60; 
      timeout(); 
     }); 
}) 

function timeout(){ 
    thisTimer = setTimeout(function() { // define a timeout into a variable 
     if(timeInSeconds>0){ 
     timeInSeconds-=1; 
     hours = Math.floor(timeInSeconds/3600); 
     minutes = Math.floor((timeInSeconds - hours)/60); 
     seconds = (timeInSeconds - hours*3600 - minutes*60) 
     $("#timer").html(hours + ":" + minutes + ":" + seconds); 
     } 
    timeout(); 
    }, 1000); 
} 
1

你應該:使用setInterval代替setTimeout,返回的時間間隔的ID setInterval產生,清除間隔重新啓動它。這裏有一個例子:https://jsfiddle.net/8n2b7x0s/

$(function(){ 
     var sessionmin = 25; 
     var intervalId = null; 
     $("#sessionMinutes").html(sessionmin); 
     $("#circle").click(function() { 
      timeInSeconds = sessionmin * 60; 
      // clear the current interval so your code isn't running multiple times 
      clearInterval(intervalId); 
      // restart the timer 
      intervalId = run(); 
     }); 
}) 

function run(){ 
    return setInterval(function() { 
     if(timeInSeconds>0){ 
      timeInSeconds-=1; 
      hours = Math.floor(timeInSeconds/3600); 
      minutes = Math.floor((timeInSeconds - hours)/60); 
      seconds = (timeInSeconds - hours*3600 - minutes*60) 
      $("#timer").html(hours + ":" + minutes + ":" + seconds); 
     } 
    }, 1000); 
} 
相關問題