2016-02-11 42 views
-4

我有這個計數器啓動和停止循環計數器:的JavaScript

http://jsfiddle.net/nsu77w92/17/

它的原理是倒計時,運行一些功能,然後再倒計數。

功能正在拼命地跑這樣的:

setInterval(function() { 
countdown(); 
},10000); 

我無法弄清楚,如何使啓動和停止它。

我已經試過這樣的事情:

function start() { 
    timer = setTimeout(tick, 1000); 
}; 

function stop() { 
    clearTimeout(timer); 
}; 

,但它不工作。有人可以幫助我嗎?你有任何建議來解決它?請檢查小提琴(以上鍊接)

+1

當是'停止()'叫什麼名字? 「滴答」功能在哪裏。 – Tushar

+0

這是我嘗試過的,我已經應用到代碼中,但這裏複製的這個示例是從另一個源複製的。 – Simon

回答

2

你必須返回並從start function賦給變量的timerId和變量作爲參數傳遞到stop function調用,如下面的代碼片段:

function start() { 
    var tick = function(){ 
     console.log('I am tick function'); 
    }; 
    var timerId = setTimeout(tick, 1000); 
    return timerId 
}; 
var timerId = start(); 
function stop(timerId) { 
    clearTimeout(timerId); 
}; 
stop(timerId); 

關於你評論中提供的代碼片段,我已更新to that one

注意修改與timerId的交互變量。問題出在你跟蹤它的方式(timerId)。當您在tick function內撥打setTimeout函數時,您必須更新「新的股票代碼」的值,這樣才能停止傳入setTimeout的最新函數。

+0

感謝您的回答!請檢查我的小提琴,看看我使用的是什麼功能。此代碼似乎不工作,就像我需要:(http://codepen.io/anon/pen/obJMJO – Simon

+0

我已經更新了您的案例的答案 –

+0

謝謝我看到它。這將是完美的,但現在開始工作第一個循環,我需要它在我的第一個崗位小提琴上工作,它每次循環,完成計數後,它會運行功能,並自動重新啓動 – Simon

0

我找到了一種方法來做到這一點。

如果有人需要它,在這裏你去: http://codepen.io/anon/pen/obJMJO

function start(){ 
countdown(); 
} 
function stop(){ 
clearTimeout(timerI) 
} 
sectotal = 5; 
function countdown() { 
     var secs = sectotal; 

     function timer() { 
      secs--; 
     $("#counter").html("(" + secs + ")") 


      if(secs > 0) { 
       timerI = setTimeout(timer, 1000); 
      } else { 
       alert('repeat!') 
       secs = sectotal 
       countdown(); 
      } 
     } 
     timer(); 
} 

和HTML:

<div id="counter"></div> 
<button onclick="start()"> 
Start 
</button> 
<button onclick="stop()"> 
Stop 
</button>