2013-12-19 49 views
0

我想做一個計數器函數,並精確地爲變量的開始時間和地點進行顯示。簡單的JavaScript函數

所以,如果我想有每頁很多櫃檯,我可以很容易地對其進行管理:提前

$(document).ready(function() { 

      // set time and place (where to display the counter) 
      function countDown(time, place){ 

       if(time > 0){ 
        time--;  
        setInterval(function(){countDown(time,place)}, 1000); 
       } // end if 

       if(time == 0) 
       { 
        window.clearInterval(time); 
       } 
      } // end function 

        $('.click').click(function(){ 
         countDown(30, '#counter');        

        }); 

}); // end DOM 

    </script> 
</head> 


<body> 
    <div class="click">clickme</div> 
    <br /> 

    <div id="counter">30</div> 

</body> 

感謝

+3

你忘了問你的問題嗎? – fbynite

+0

請注意,* setInterval *不會按指定的間隔運行,因此上述操作不會以精確的1秒爲間隔運行,因此只需在每次調用中遞減該值就不會準確反映經過的秒數。該函數也會在每次運行時調用它自己,所以大約30秒後,您將有30個計時器運行。 – RobG

+0

另外,* clearInterval *期望將從調用返回的值傳遞給* setInterval *,而不是'0'。 – RobG

回答

2

試試這個:

<html> 
    <head> 
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"> 
    </script> 
    <script> 


       var myVar; 
var clickcount=0; 

function countDown (time, place) { 
     if (time > 0) { 

     $(place).html(time); 
     time--; 
     myVar=setTimeout(function() { countDown(time, place); }, 1000); 
    } 
} 

function startreset(time,place){ 
     clickcount++; 
     if(clickcount % 2 === 0){ 
      clearTimeout(myVar);    
     } else { 
      countDown(time,place); 
     } 

    } 

$('.click').click(function(){ 
     startreset(30, '#counter');        
     }); 



     </script> 
    </head> 




<body> 
     <div class="click" onClick="javascript:countDown(30,'#counter');">clickme</div> 
     <br /> 

     <div id="counter">30</div> 

    </body> 
+0

感謝你們所有人,我注意到了一些事情,如果我點擊「點擊我」計數器開始,如果我再次點擊,另一個計數器開始了,有兩種方法可以重置它: 1-一旦再次點擊重置爲0, 2-暫停它。 如果有人可以向我解釋這兩種情況 謝謝你們 –

+0

保持一個全局變量保持跟蹤,如果它已被按下。它可以是count = 0;每次按下呼叫一個增加計數的功能。基於計數%2 = 0/1,你可以做點什麼。如果您認爲這有幫助,請加快我的迴應。 –

+0

我測試過這一個,只是爲了檢查我是否有你的想法,但它似乎掛在那裏:function clearTimer(ident){ident ++; if(ident%2 == 0){alert(0); } else {alert(1); ();}} $('。click')。click(function(){countDown(30,'#counter'); clearTimer(1);}); –

1

你的問題可能是你多次調用setInterval。 setInterval不僅僅是等待你告訴它的毫秒,然後調用你的方法,它繼續每次隨後調用你的方法x毫秒。因此,當您第一次調用countDown時,會爲您的函數設置一個間隔。該間隔到期並再次調用countDown。目前爲止都很好,但現在countDown的第二個調用建立了另一個 setInterval。該程序將等待你的x毫秒從第二個setInterval調用countDown,但它會從第一個setInterval更快地調用它。

...換句話說,你不應該反覆調用setInterval。你想要的是setTimeout,它等待指定的時間量,然後調用指定的方法一次

function countDown (time, place) { 
    if (time > 0) { 
    time--; 
    $(place).html(time); 
    setTimeout(function() { countDown(time, place); }, 1000); 
    } 
} 

另外,如果你沒有遞歸今天感覺:

function countDown (time, place) { 
    var interval = setInterval(function() { 
    if (time > 0) { 
     time--; 
     $(place).html(time); 
    } else { 
     window.clearInterval(interval); 
    } 
    }, 1000); 
} 

它利用setInterval的,但只有一次。

JS提供:http://jsfiddle.net/LKvBR/

+0

我測試過這一個,只是爲了檢查我是否有你的的想法,但似乎掛在那裏: [code] function clearTimer(ident){ ident ++; if(ident%2 == 0){alert(0); } else { alert(1); ( '點擊')。 } } $點擊(函數(){ COUNTDOWN(30, '#counter'); clearTimer(1); }); [/ code] –