Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.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 highscore计数器未更新_Javascript_Html_Forms - Fatal编程技术网

Javascript highscore计数器未更新

Javascript highscore计数器未更新,javascript,html,forms,Javascript,Html,Forms,我正在尝试制作一个游戏来测量你的反应时间,但我的最快分数跟踪器是非常有缺陷的。它在第一次反应测试期间工作,但之后停止工作。提前感谢任何能提供帮助的人 <!DOCTPYE html> <html> <head> <script> window.onload = alert("Press START to start the game. As soon as the screen turns red click the stop button. Ge

我正在尝试制作一个游戏来测量你的反应时间,但我的最快分数跟踪器是非常有缺陷的。它在第一次反应测试期间工作,但之后停止工作。提前感谢任何能提供帮助的人

<!DOCTPYE html>
<html>
<head>
<script>

window.onload = alert("Press START to start the game. As soon as the screen turns red click the stop button. Get the fastest time you can. Good luck");
var button = document.getElementById("reactionTester");
var start = document.getElementById("start");
var startTime;
var scoreContainer = document.getElementById("p");
var css = document.createElement("style");
css.type= "text/css";
var counter = 0;
var timer = null;
var highscore = document.getElementById("highscore");
var currentRecord = 0;
var highscoreCounter = 0;
function init(){
var startInterval/*in milliseconds*/ = Math.floor(Math.random()*10)*1000;
clearTimeout(timer);
timer = setTimeout(startTimer,1/*startInterval*/);
document.body.appendChild(css);
css.innerHTML = "html{background-color: blue;}";
}
function startTimer(){

startTime = Date.now();
css.innerHTML="null";
css.innerHTML = "html{background-color: red;}";
if(counter==1){
p1 = document.getElementsByTagName('p')[1];
p1.parentNode.removeChild(p1);
counter++;
}
}

function stopTimer(){
if(startTime){
var stopTime = Date.now();
var dif = stopTime - startTime;
alert("Your time is " + dif + " ms");
startTime = null;
css.innerHTML = null;
var p = document.createElement("p");
document.body.appendChild(p);
p.innerHTML = dif;
counter=1;
if (highscoreCounter != 0){
    if(dif < currentRecord){
        Phighscore2 = document.getElementsByTagName('p')[0];
        Phighscore2.parentNode.removeChild(Phighscore2);
        document.getElementById("highscore").appendChild(highscoreP);
        currentRecord = dif;
        highscoreP.innerHTML = currentRecord;
    }
    else{}
}
else{
    var highscoreP = document.createElement("p");
    document.getElementById("highscore").appendChild(highscoreP);
    currentRecord = dif;
    highscoreP.innerHTML = currentRecord;
    highscoreCounter++;
}
}
else{
alert("don't trick me");
}
}

</script>
</head>
<body>
<div id="highscore">

</div>
<form id="form">
<div class="tableRow">
<input type="button" value="start" id="start" onclick="init()">
</div>
<div class="tableRow">
<input type="button" id="reactionTester" onclick="stopTimer()" value="stop">
</div>
<div id="p">
</div>
</form>
</body>
</html>

window.onload=alert(“按开始键开始游戏。一旦屏幕变红,单击停止按钮。以最快的速度完成游戏。祝你好运”);
var按钮=document.getElementById(“reactionTester”);
var start=document.getElementById(“start”);
var startTime;
var scoreContainer=document.getElementById(“p”);
var css=document.createElement(“样式”);
css.type=“text/css”;
var计数器=0;
var定时器=null;
var highscore=document.getElementById(“highscore”);
var currentRecord=0;
var highscoreCounter=0;
函数init(){
var startInterval/*以毫秒为单位*/=Math.floor(Math.random()*10)*1000;
清除超时(计时器);
定时器=设置超时(startTimer,1/*startInterval*/);
document.body.appendChild(css);
css.innerHTML=“html{背景色:蓝色;}”;
}
函数startTimer(){
startTime=Date.now();
css.innerHTML=“null”;
css.innerHTML=“html{背景色:红色;}”;
如果(计数器==1){
p1=document.getElementsByTagName('p')[1];
p1.parentNode.removeChild(p1);
计数器++;
}
}
函数stopTimer(){
如果(开始时间){
var stopTime=Date.now();
var dif=停止时间-开始时间;
警报(“您的时间为“+dif+”毫秒”);
startTime=null;
css.innerHTML=null;
var p=document.createElement(“p”);
文件.正文.附件(p);
p、 innerHTML=dif;
计数器=1;
如果(highscoreCounter!=0){
如果(dif
您的问题是由于变量
highscoreP
是在
函数stopTimer
中本地定义的。局部变量在函数返回时失去其值。使其成为全局变量(不要忘记在函数中删除其'var'关键字)

我忍不住要对您的代码多说几句:

  • 不要一次又一次地创建相同的DOM元素;它使您的代码复杂化,并加重了浏览器内存管理器的压力。静态定义所有元素,并按ID引用它们,就像您对容器所做的一样(highscore,p)
  • 不要动态构建样式元素,这是非常糟糕的做法。相反,静态定义CSS类,然后通过设置属性className动态分配类
  • 即使你在纯JavaScript中编程很好,你也可以考虑使用jQuery。
我认为这个问题对Stack来说太具体了。你知道哪些网站对Stack来说不太具体吗?不知道。但是Stack社区关注的是可能对其他人有帮助的更广泛的问题(比如web搜索)。在这里,其他人遇到与你相同问题的机会微乎其微。你的代码在我这边运行得很好。我测试了你的代码,它工作得很好,但是高分计数器,它正在取最新的分数,不是吗?而不是最快的分数。非常感谢你!!我一直在努力解决这个问题。谢谢jquery的建议,如果你不介意我问你,你知道我的代码中哪些部分可以用jquery缩短吗?DOM方面,你的代码并不复杂,因此jquery不会大大减少行数。但总的来说,它确实有助于提高可维护性和浏览器支持。通过一些认真的重构,您应该能够消除一些代码行和一些变量。非常感谢!我签出了jquery,它非常方便