2

CHROME(52)焼成されていない。keyDownイベントは、MacにCAPSLOCKため

回転キャップがONロックする - のみのKeyDown焼成ない(無イベントkeyUpイベントまたはキー押下)さ

回転キャップがOFFロックする - のみ

のみのKeyDownイベントが両方のキャップ焼成さ& OFF(NO keyUpイベントまたはキープレス)

をONロック:keyUpイベントはFIREFOX(46)(KEYDOWNまたはキー押下でない場合)

を焼成します

私はhttp://unixpapa.com/js/key.htmlここhttp://www.quirksmode.org/js/keys.htmlここでキーコードとイベントについておよびMDNでここhttps://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode、aaaand

を読んでいない。しかし、この奇妙な振る舞いについての上記のリンク会談のいずれました。 これは予想されますか?もしそうなら、それを扱う簡単な方法はありますか?

+0

、あなたがキャップを使用していることのためにロック?ユーザーとしては、私はキャップロックが「キーではない」とほとんど思っています。 – aaaidan

+0

笑、私はdotaからインスパイアされた小さなクイックハンドゲームをデザインしています。快適さに基づいて、人々はW-A-S-Dに非常に近いので、キャップロックをキーとして保持します。 –

+0

ああ、私はゲームかどうか疑問に思いました。乾杯。がんばろう! – aaaidan

答えて

3

はい、これが想定されています。私たちは行動上のキャップをオンにし、我々はそれを離すとオフにシフトキーを保持するように、それは、プレスなどのオン/オフの扱いとホールドするので

Chromeは​​として ON CAPSを扱います。このキャップロックボタンも。あなたはキャップをオンにするとは、クロムがkeypressとして「ターンオン」を扱うロックし、あなたが「をオフにする」とき、それはkeyupとしてそれを処理します。しかし、firefoxは​​としてすべてを処理しますが、それはクロムが同じように処理する方法と比較して私には意味をなさない。

ソリューション

あなたはCaps Lockの状態を取得するためにgetModifierState()を使用する必要があります。これはchromeとfirefoxでサポートされています。

希望すると助かります!関心の外

$(function() { 
 
    $(window).on("keydown", function(e){ 
 
    if (e.which === 20) 
 
     console.log(e.originalEvent.getModifierState('CapsLock')) 
 
    }); 
 
    $(window).on("keyup", function(e) { 
 
    if (e.which === 20) 
 
     console.log(e.originalEvent.getModifierState('CapsLock')) 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
Focus here and press 'Caps Lock'

+0

はい、これは私たちが得ることができる最も近い解決策のようです。タイマーを使ったクイック・キー・プレス・ゲームでは、 'keydown'イベントの代わりに' keyup'イベントを処理することに大きな違いがあります。 –

関連する問題