2015-02-04 3 views
0

Я использую Date(). GetTime для измерения продолжительности нажатия клавиши путем вычитания события keydown из события keyup. Однако, для нажатия клавиш дольше чем 500 мс, записанное время возвращается к более низкому значению.Дата getTime дает низкие значения для более длительных длительностей

Вот JSFiddle http://jsfiddle.net/bdzaorw2/

$(document).ready(function(){ 

Crafty.init(window.innerWidth,window.innerHeight); 
var player = Crafty.e(); 

//... 

function horizontal(){ 

if(keyboard[38] && !player.jumping){ 
    player.v.velocity = 5; 
    player.jumping = true; 
} 

if(keyboard[38] && player.jumping){ 
    var now = new Date(); 
    if(now.getTime() - keystart[38].getTime() < 500){ 
     player.v.velocity = 5; 
    } 
    document.getElementById("p").innerText = now.getTime() - keystart[38].getTime(); 
} 


    setTimeout(horizontal, (frame * 1000)/timeMultiplier); 
} 


horizontal(); 


document.body.addEventListener("keyup", function (code) { 
    keyboard[code.keyCode] = false; 
}); 

document.body.addEventListener("keydown", function (code) { 
    keyboard[code.keyCode] = true; 
    var then = new Date(); 
    keystart[code.keyCode] = then; 
}); 

}); 

ответ

0

Я видел что-то неправильно в вашем коде: - на KeyDown вы расчета и перерасчета Date.now() так просто изменил эту часть кода

keyboard[code.keyCode] = true; 
var then = new Date(); 
keystart[code.keyCode] = then; 

с этим:

var then = new Date(); 
if(!keyboard[code.keyCode]) { //only if not yet pressed it will ignore everything until keyup 
    keyboard[code.keyCode] = true; //start movement 
    keystart[code.keyCode] = then; //set time 
} 

Вот адаптированный пример: http://jsfiddle.net/bdzaorw2/

0

Попробуйте Event.timeStamp и посмотреть, если это делает разницу. Вот один пример:

var number = event.timeStamp; 

и

<html> 
<head> 

<title>timeStamp example</title> 

<script type="text/javascript"> 
function getTime(event) { 
    document.getElementById("time").firstChild.nodeValue = event.timeStamp; 
} 
</script> 
</head> 

<body onkeypress="getTime(event)"> 

<p>Press any key to get the current timestamp 
for the onkeypress event.</p> 
<p>timeStamp: <span id="time">-</span></p> 

</body> 
</html> 
+1

Это должно, вероятно, комментарий по этому вопросу, а не ответ на свой собственный. – ssube

+0

@ssube достаточно справедливо – risto

Смежные вопросы