私には 2 つのオプションがkeypress
ありますkeydown
。keypress
キーが繰り返された場合、つまりキーが長押しされた場合でも、イベントを記録するので、使用する傾向があります。しかし問題は、keypress
矢印キーなどの特殊なキーを Firefox だけに記録することです。クロスブラウザでやりたい場合は使用する必要がありますkeydown
が、長押しは単一のイベントとして記録されます。
どんな助けでも大歓迎です。
私には 2 つのオプションがkeypress
ありますkeydown
。keypress
キーが繰り返された場合、つまりキーが長押しされた場合でも、イベントを記録するので、使用する傾向があります。しかし問題は、keypress
矢印キーなどの特殊なキーを Firefox だけに記録することです。クロスブラウザでやりたい場合は使用する必要がありますkeydown
が、長押しは単一のイベントとして記録されます。
どんな助けでも大歓迎です。
var pressed = null;
$(element).on('keydown', function(event) {
pressed = +new Date();
// do whatever else you need upon key down
});
$(element).on('keyup', function(event) {
var duration = +new Date() - pressed;
pressed = null;
// do whatever you need to do based on the duration of the press
});
複数のキーが同時に押された場合のサポートについては、演習として残します。
次のように、2 つのイベントを使用できます。
var timer=false,
pressedTime = 1000; //one second
$('input').on({
keydown: function(e) {
var charCode = (e.which) ? e.which : event.keyCode, keyP;
if (charCode===37) keyP = 'left';
if (charCode===38) keyP = 'up';
if (charCode===39) keyP = 'right';
if (charCode===40) keyP = 'down';
if (!timer) timer = setTimeout(function() {
clearTimeout(timer);
timer=false;
alert(keyP+' arrow key held down for 1 second');
}, pressedTime);
},
keyup: function() {
clearTimeout(timer);
timer=false;
}
});
これを実現するのに役立つjQuery Responsivenessという名前のプラグインがあります。