原生jsがタイピング動画ゲームを実現しました。


これは昨日原生のjsで書いたタイプのアニメーションゲームです。主に使う間欠タイマー、対象、そしてMath方法があります。感じはまあまあです。主に文字を消す時間が遅いですが、バグもあります。つまり文字は一回で生成されますので、最初は爆発的な感じがします。大神さんに改変をお願いします。みんなも参考にしてください。

<!DOCTYPE html>
<html>
<head lang="en">
 <meta charset="UTF-8">
 <title></title>
 <style>
  body,button{
   margin: 0;
   padding: 0;
  }
  body {
   background: #333;
  }
  #game {
   width: 400px;
   margin: 0 auto;
  }
  #start {
   width: 80px;
   height: 40px;
  }
  span {
   margin: 20px;
   color: white;
  }
  .letter {
   position: absolute;
   color: yellow;
   font: bold 30px "Arial";
  }
 </style>
 <script>
  window.onload= function () {
   var start = document.getElementById("start");
   var scroll = document.getElementById("scroll");
   var time = document.getElementById("time");
   var g = 1 ;//Gravity
   var timenum = 0 ;//     
   var num = 0 ;//     
   var gameover = false ;
   var timeandtime = null;
   var letters = null ;
   //           ,    
   var str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
   //      ,       ,   ,       
   //    :         ,        
   //                         ;
   //         ,     ,       。
   //      ,          ,    ,    ,            
   var eventUtil = {
    getEvent: function (event) {
     return event || window.event;
    },
    getPageX: function (event) {
     return event.pageX || event.clientX + document.documentElement.scrollLeft;
    },
    getPageY: function (event) {
     return event.pageY || event.clientY + document.documentElement.scrollTop;
    },
    stopPropagation: function (event) {
     if (event.stopPropagation) {
      event.stopPropagation();
     } else {
      event.cancelBubble = true;
     }
    },
    getTarget: function (event) {
     return event.target || event.srcElement;
    }
   };
   start.onclick= function () {
    for(var i = 0 ;i<26;i++){
     new letter();
    }
    letters = document.body.children;//       div          ,     ,  game,     1  
    //    ,        ,       ,       ,         ;
    document.onkeydown = function (event) {
     var evt = eventUtil.getEvent(event);
     var keychar = String.fromCharCode(evt.keyCode);//                   
     for(var i = 1 ;i<letters.length;i++){
      if(keychar===letters[i].innerHTML){
       num++;
       scroll.innerHTML = num;
       document.body.removeChild(letters[i]);
      }
     }
    }
    timeandtime=setInterval(function () {
     timenum = timenum + 1 ;
     console.log(letters);
     if(letters.length==1){//            ,       
      gameover = true ;
      clearInterval(timeandtime);
      alert("  "+timenum+" ,    !  10 !");
     } else {
      time.innerHTML = timenum;
     }
    },1000)
   }
   //    
   function letter(){
    this.x=Math.random()*900+100; //     100-1000  
    this.y=0;
    this.speedY = Math.random()*4+1; //       1-5  
    this.value = str[parseInt(Math.random()*25)]; // 26            
    var letDiv = document.createElement("div");
    letDiv.className = "letter";
    letDiv.style.top = this.y+"px";
    letDiv.style.left = this.x+ "px";
    letDiv.innerHTML = this.value;
    document.body.appendChild(letDiv);
    //     
    var that = this ;
    this.timer=setInterval(function () {
     //leader = leader + step;
     that.y = that.y + that.speedY;
     if(that.y>=client().height-letDiv.offsetHeight){
      that.y = 0;
      that.x = Math.random()*900+100;
     }
     if(!gameover){
      letDiv.style.left = that.x + "px";
      letDiv.style.top = that.y + "px";
     } else {
      clearInterval(that.timer);
     }
    },15)
   }
   //              ,     
   function client() {
    return {
     width: window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth || 0,
     height: window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight || 0
    };
   }
  }
 </script>
</head>
<body>
<div id="game">
 <button id="start">  </button>
 <span>  :<i id="scroll">0</i></span>
 <span>  :<i id="time">0</i></span>
</div>
</body>
</html>
以上が本文の全部です。本文の内容は皆さんの学習や仕事に一定の助けをもたらしてくれると同時に、私達を応援してください。