SetInterval函数参数

时间:2015-05-03 18:39:21

标签: javascript twitter-bootstrap

我(品牌)是编程的新手,我试图创建一个简单的JavaScript游戏。

我的问题是:

为什么window.setInterval函数似乎会阻止所有内容?

我从this tutorial学习并试图在使用不同的变量名时重写整个事物。原版工作正常,但是一旦我添加最后3行代码的javascript,整个事情变得没有反应。我一直在看这段代码30分钟,我似乎无法找到问题。

main.js

var things = 0;
var gen1 = 0;


function thingClick(number) {
    things = things + number;
    document.getElementById("things").innerHTML = things;
}

function buyGen1() {
    var gen1Cost = Math.floor(10 * Math.pow(1.1, gen1));
    if(things >= gen1Cost) {
        gen1 = gen1 + 1;
        things = things - gen1Cost;
        document.getElementById('gen1').innerHTML = gen1;
        document.getElementById('things').innerHTML = things;
    }
    var nextCost = Math.floor(10 * Math.pow(1.1, gen1));
    document.getElementById('gen1Cost').innerHTML = nextCost;
}

window.setInterval(function) {
    thingClick(gen1);
}

的index.html

    <!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
    <title>Bootstrap 101 Template</title>

    <!-- Bootstrap -->
    <link href="css/bootstrap.min.css" rel="stylesheet">
    <script type="text/javascript" src="js/main.js"></script>
    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
    <!--[if lt IE 9]>
      <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
      <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
  </head>
  <body>
        Things: <span id="things">0</span><br><br>
        <button onClick="thingClick(1)">Get Things</button><br><br>
        <button onClick="buyGen1()">Buy Generator Lvl. 1</button><br><br>
        Generators Lvl. 1: <span id="gen1">0</span> | Cost: <span id="gen1Cost">10</span>

     <!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
    <!-- Include all compiled plugins (below), or include individual files as needed -->
    <script src="js/bootstrap.min.js"></script>
  </body>
</html>

2 个答案:

答案 0 :(得分:1)

setInterval有点像这样:

var interval = setInterval(function(){
  //call code here every n seconds
},delay)

一个实际的例子是这样的:

var interval = setInterval(function(){
   thingClick(gen1);
},2000) //call it every 2000 milliseconds, or 2 seconds

所以你基本上写了setInterval错误的

您也可以通过清除它来停止间隔。因此,对于上面的示例,simlpy调用clearInterval(interval)将停止/清除它。

答案 1 :(得分:0)

语法

当JavaScript发现一个错误时。它将完全停止,您的错误在您的语法中:

window.setInterval(function) {
    thingClick(gen1);
}

应该是:

window.setInterval(function () {
}, 500); // Adjust 500

<小时/>

流量

编译器正在做之类的事情

  • 使用参数window.setInterval()检查function
    • 然后,编译器会注意到无效的语法,并引发错误,导致JavaScript无法运行。
  • 如果编译器出于某种原因没有停止,它会在{}中看到一些随机代码使其更加混乱

<小时/>

clearInterval()

创建setIntervals时,应始终将其分配给变量,以便可以将其停止。你不想要一个失控的计时器:

var my_timer = window.setInterval(function () {
    thingClick(gen1);
}, 1000); // Every 1000 ms

然后你可以运行:

window.clearInterval(my_timer);