Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Can';我似乎无法让这个柜台工作_Javascript - Fatal编程技术网

Javascript Can';我似乎无法让这个柜台工作

Javascript Can';我似乎无法让这个柜台工作,javascript,Javascript,嗨,我正在尝试建立一个简单的网络浏览器游戏,它会告诉你点击键盘键的速度有多快(例如50,75,100)。我这里有这个代码: HTML: 我似乎无法让if语句执行将禁用控件和显示警报的函数。任何帮助或建议都将不胜感激。我认为您需要的是keydown函数中的“if”,否则它将在执行js时运行一次 window.onload = function() { myFunction() document.onkeydown = function(e){ if (IsGameAli

嗨,我正在尝试建立一个简单的网络浏览器游戏,它会告诉你点击键盘键的速度有多快(例如50,75,100)。我这里有这个代码:

HTML:


我似乎无法让if语句执行将禁用控件和显示警报的函数。任何帮助或建议都将不胜感激。

我认为您需要的是keydown函数中的“if”,否则它将在执行js时运行一次

window.onload = function() {
    myFunction()
    document.onkeydown = function(e){
      if (IsGameAlive==1) {
          e = e || window.event;
          var key = e.which || e.keyCode;
          if(key==32){
              add();
          }
      }
    }
}
此外,正如Andy在评论中提到的,您可能希望将计时器更改为1秒,而不是1/1000秒

function myFunction() {
  setInterval (stopwatch,1000)
}

if语句应该在函数中。因此,不是:

function add() {
  count = count + 1;
}
if (count==50) {
  gamefinished();
}
应该是:

function add() {
  count = count + 1;
  if (count==50) {
    gamefinished();
  }
}

从您当前的代码来看,似乎存在一些简单的常规错误,因此这里有一个经过清理的版本:

var count = 0;
var IsGameAlive = true; //use booleans
var interval; //store interval
window.onload = function() {
    myFunction(); //missing semi-colons
    if (IsGameAlive) { //if statement should be contained inside window.onload
      document.onkeydown = function(e){
          if (IsGameAlive){ //prevent detection when game ended
               e = e || window.event;
              var key = e.which || e.keyCode;
              if(key==32){
                  add();
              }
          }
      }
    }
}; //missing semi-colons

function myFunction() {
    interval = setInterval(stopwatch,1000); //missing semi-colons, and run every 1000 = 1 second
}
function stopwatch() {
    document.getElementById('dt').innerHTML = count;
}
function add() {
    count = count + 1;
    if (count>=50) {
        gamefinished();
    }
    return;
}
function gamefinished() {
    window.alert("You Won!");
    IsGameAlive = false;
    clearInterval(interval); //remove interval
    return;
}
编辑 为了更好地保持时间,可以将计时器设置回每10毫秒运行一次,然后使用下面的函数获得更准确的时间。(与使用设置为1毫秒的计时器相比,这也减少了资源密集度,同时保持非常准确)


你能给我们一个JSFIDLE吗?每毫秒从DOM中抓取一个元素可能不是一个好主意fwiw。你的if语句将被调用一次,很可能是在你的DOM已经准备好编辑它之前,仍然不起作用,还有什么建议吗?把
文档。onkeydown
部分扔到你的
窗口里。onload
谢谢,伙计,它行得通,你能给我一个简短的解释为什么它行不通吗?我只开始使用Javascript。谢谢:)就像以前一样,if语句不在任何函数中。当页面最初加载时,任何不在函数内的代码只执行一次。您希望它在每次计数更改时执行,因此需要将其放入add()函数中。希望有帮助!如果这是有益的,请考虑接受和投票-见
function add() {
  count = count + 1;
  if (count==50) {
    gamefinished();
  }
}
var count = 0;
var IsGameAlive = true; //use booleans
var interval; //store interval
window.onload = function() {
    myFunction(); //missing semi-colons
    if (IsGameAlive) { //if statement should be contained inside window.onload
      document.onkeydown = function(e){
          if (IsGameAlive){ //prevent detection when game ended
               e = e || window.event;
              var key = e.which || e.keyCode;
              if(key==32){
                  add();
              }
          }
      }
    }
}; //missing semi-colons

function myFunction() {
    interval = setInterval(stopwatch,1000); //missing semi-colons, and run every 1000 = 1 second
}
function stopwatch() {
    document.getElementById('dt').innerHTML = count;
}
function add() {
    count = count + 1;
    if (count>=50) {
        gamefinished();
    }
    return;
}
function gamefinished() {
    window.alert("You Won!");
    IsGameAlive = false;
    clearInterval(interval); //remove interval
    return;
}
var initialTime = Date.now(); //global variable

function getSecondsPassed(){
    return Math.floor((Date.now()-initialTime)/1000);
}