Вот, пожалуйста:
var pressed = {};
window.onkeydown = function(e) {
if ( pressed[e.which] ) return;
pressed[e.which] = e.timeStamp;
};
window.onkeyup = function(e) {
if ( !pressed[e.which] ) return;
var duration = ( e.timeStamp - pressed[e.which] ) / 1000;
// Key "e.which" was pressed for "duration" seconds
pressed[e.which] = 0;
};
Живая демоверсия: http://jsfiddle.net/EeXVX/1/show/
(удалите часть URL "show /", чтобы просмотреть код для демонстрации)
Итак, у вас есть объект pressed
, который отслеживает, какие клавиши нажимаются в данный момент и в какой момент (во времени) они были нажаты.
Внутри обработчика keyup вы определяете, была ли нажата клавиша, и, если это так, вычисляете продолжительность, вычитая метки времени событий keyup / keydown.