2014-09-10 59 views
1

嗨我正在使用Java腳本計時器,它在IE中運行良好,但是在Chrome最小化時它變得太慢,在Mozilla中停止計時器。任何人都可以提出建議我的代碼如下: -當窗口最小化時,Chrome瀏覽器和Mozilla中的計時器JavaScript不運行

<html> 
<head> 
<script> 

var millisec = 0; 
var seconds = 0; 
var timer; 

function display(){ 

    if (millisec>=9){ 
    millisec=0 
    seconds+=1 
    } 
    else 
    millisec+=1 
    document.d.d2.value = seconds + "." + millisec; 
    timer = setTimeout("display()",100); 
    } 

function starttimer() { 

    if (timer > 0) { 
    return; 
    } 
    display();  
} 
function stoptimer() { 
    clearTimeout(timer); 
    timer = 0; 
} 

function startstoptimer() { 
    if (timer > 0) { 
    clearTimeout(timer); 
    timer = 0; 
    } else { 
    display(); 
    } 
} 

function resettimer() { 
    stoptimer(); 
    millisec = 0; 
    seconds = 0; 
} 



</script> 
</head> 
<body> 
<h5>Millisecond Javascript Timer</h5> 
<form name="d"> 
<input type="text" size="8" name="d2"> 
<input type="button" value="Start/Stop" onclick="startstoptimer()"> 
<input type="reset" onclick="resettimer()"> 
</form> 

</body></html> 
+0

參見[我怎樣才能當標籤是在Chrome中不活躍的setInterval還工作嗎?(http://stackoverflow.com/q/5927284/218196)。不確定關於Firefox。 – 2014-09-10 16:17:39

+0

認識到'setTimeout(「display()」,100)'最好寫作爲'setTimeout(display,100)'(無括號!)「。 JavaScript會評估''display()「'這是一種效率不高的效果。 – Halcyon 2014-09-10 16:23:13

回答

0

您不能使用setTimeout來製作可靠的計時腳本。

約翰Resig的介紹瞭如何JavaScript的定時器工作:http://ejohn.org/blog/how-javascript-timers-work/

短的版本是,有總是有一個小的延遲。您傳遞給setTimeout的毫秒參數是「盡力而爲」


如果要顯示實時計時器,請考慮經常輪詢時間。如果事件循環速度變慢,那麼追蹤時間的能力就不會受到影響,只會得到更少的更新。

http://jsfiddle.net/64pcr7pw/

<script type="text/javascript"> 
var timer, time = 0, start_time = 0; 
function startstoptimer() { 
    if (timer) { 
     time += new Date().getTime() - start_time; 
     start_time = 0; 
     clearInterval(timer); 
     timer = null; 
    } else { 
     start_time = new Date().getTime(); 
     timer = setInterval(function() { 
      document.d.d2.value = time + new Date().getTime() - start_time; 
     }, 10); 
    } 
} 
function resettimer() { 
    time = 0; 
    start_time = new Date().getTime(); 
    document.d.d2.value = "0"; 
} 
</script> 

<form name="d"> 
    <input type="text" size="8" name="d2"/> 
    <input type="button" value="Start/Stop" onclick="startstoptimer()"/> 
    <input type="reset" onclick="resettimer()" /> 
</form> 
+0

非常感謝!這真的有效 – 2014-09-10 16:35:25

+0

我試圖在定時器值爲9000毫秒時調用logout(),它首次執行,但此後它不會註銷。 – 2014-09-17 13:14:32

+0

請發佈您的代碼。 – Halcyon 2014-09-17 15:29:53

相關問題