2016-11-24 63 views
-3

我试图在Javascript中制作一个普通的定时器,并开始用一些教程的帮助编写代码。定时器不启动运行

我做了与本教程中相同的方式,但我的计时器实际上并未开始运行,而我不知道为什么。

这里是我的代码:

var time = 0; 
     var running = 0; 

     function startPause() { 
      if(running == 0){ 
       running = 1; 
       increment(); 
      } 
      else{ 
       running = 0; 
      } 
     } 

     function reset(){ 
      running = 0; 
      time = 0; 
      document.getElementById("startPause").innerHTML = "Start"; 

     } 
     function increment() { 
       if(running == 1){ 
       setTimeout(function(){ 
        time++; 
        var mins = Math.floor(time/10/60); 
        var secs = Math.floor(time/10); 
        var tenths = time % 10; 
        document.getElementById("output").innerHTML = mins + ":" + secs + ":" + tenths; 

          }, 100); 
       } 
     } 
</script> 

我也做了小提琴,你可以看看这里:https://jsfiddle.net/adamswebspace/5p1qgsz9/

什么是错我的代码?

+0

你有3个功能,但无处你的样品中,你实际上调用它们。您在这里没有在您的示例中包含所有在小提琴中的代码,这对读者来说是令人困惑的。在你的小提琴中,有一个JS错误“startPause不是一个函数”,这只是因为你需要在调用它的代码之前包含该函数。在JSFiddle中,只需更改Javascript选项,以便loadType为“nowrap - in head”。 https://jsfiddle.net/5p1qgsz9/1/另一个问题是计时器只运行一次 - 我认为你需要setInterval而不是setTimeout。 – ADyson

+1

我认为你需要的是setInterval而不是setTimeout。 setTimeout将只执行一次。 – user2427829

+0

好吧,我试着在我的小提琴中尝试setTimeout为我的计时器。谢谢 – adamswebspace

回答

0

我清理了一下你的代码,使用的setInterval,而不是setTimeout的; 注意,您必须对我们可以使用clearInterval以停止计时器

var time = 0; 
var running = 0; 
var timer = null; 
function increment() { 
    time++; 
    var mins = Math.floor(time/10/60); 
    var secs = Math.floor(time/10); 
    var tenths = time % 10; 
    document.getElementById("output").innerHTML = mins + ":" + secs + ":" + tenths; 
} 
function startPause() { 
    if (running === 0) { 
     running = 1; 
     timer = setInterval(increment, 1000); 
    } else { 
     running = 0; 
     clearInterval(timer); 
    } 
} 

function reset() { 
    running = 0; 
    time = 0; 
    document.getElementById("startPause").innerHTML = "Start"; 

} 
+0

谢谢,这帮助我了解了我的问题! :) – adamswebspace

+0

不客气 –

0

您必须将功能绑定像下面

var vm = this; 

vm.startPause = function startPause() { 
    if (running == 0) { 
    running = 1; 
    vm.increment(); 
    } else { 
    running = 0; 
    } 
} 

https://jsfiddle.net/f7hmbox7/

0

为了onclick找到你的代码的功能。它必须以用于JSFiddle的<script>标记提供。

你可以只添加

<script> 

/** JS Here */ 

</script> 

,它会工作。

请记住,所有来自JS的错误都显示在浏览器检查器的控制台中。

https://jsfiddle.net/dzskncpw/

+0

工作也感谢。 – adamswebspace

相关问题