SOURCE

console 命令行工具 X clear

                    
>
console
function tip(text){
  document.getElementById('tip').innerHTML=text
}

let key_records=[[],[],[]]
let flight_times=[[],[],[]]

let key_records2=[]
let flight_times2=[]

const signup_index_max = 3
let signup_index=0
let status=''
document.getElementById('signup').onclick=function(){
  status = 'signup'
  signup_index=0
  document.getElementById('password').value=""
  tip(`正在注册,请第${signup_index+1}次输入密码,回车键确定`)
}
document.getElementById('password').onkeydown=function(event){
  if(status == 'signup'){
    key_records[signup_index].push({
      key:event.key,
      down_time:event.timeStamp,
      up_time:null
    })    
  }else{
    key_records2.push({
      key:event.key,
      down_time:event.timeStamp,
      up_time:null
    })    
  } 
}
document.getElementById('password').onkeyup=function(event){
  if(status == 'signup'){
    for(let i=0;i<key_records[signup_index].length;i++){
      if(key_records[signup_index][i].up_time==null && key_records[signup_index][i].key==event.key){
        key_records[signup_index][i].up_time=event.timeStamp
      }
    }
    if(event.key=="Enter"){
      document.getElementById('password').value=""
      signup_index++
      if(signup_index>=signup_index_max){
        status="signin"
        set_flight_times()
        tip(`注册完成`)        
      }else{
        tip(`正在注册,请第${signup_index+1}次输入密码,回车键确定`)        
      }
    }
  }else{
    for(let i=0;i<key_records2.length;i++){
      if(key_records2[i].up_time==null && key_records2[i].key==event.key){
        key_records2[i].up_time=event.timeStamp
      }
    }
    if(event.key=="Enter"){
      document.getElementById('password').value=""
      for(let j=1;j<key_records2.length;j++){
        flight_times2.push(key_records2[j]['down_time']-key_records2[j-1]['up_time'])
      }
      let sumb = eval(flight_times2.join("+"))
      let suma = eval(flight_times[0].join("+"))      
      // for(let i=0;i<flight_times2.length;i++){
      //   flight_times2[i]=2.5*flight_times2[i]*(sumb-suma)/suma/flight_times2.length
      // }
      let n1=0,n2=0,n3=0
      for(let i=0;i<flight_times2.length;i++){
        n1+=flight_times[0][i]*flight_times2[i]
        n2+=flight_times[0][i]*flight_times[0][i]
        n3+=flight_times2[i]*flight_times2[i]
      }
      let m = n1/Math.sqrt(n2)/Math.sqrt(n3)
      key_records2.length=0
      flight_times2.length=0
      tip(`${m}`)       
    }
  }
}

function set_flight_times(){
  for(let i=0;i<key_records.length;i++){
    for(let j=1;j<key_records[i].length;j++){
      flight_times[i].push(key_records[i][j]['down_time']-key_records[i][j-1]['up_time'])
    }
  }
} 





<div>
  <button id='signup'>注册</button>
  <button id='signin'>登录</button>
</div>
<input id='password'></input>
<div>
  <span id="tip"></span>
</div>