あなたはそれを試すことができます..実際の例を追加しました。フォーカスが入力にある場合、caps lock をオンにすると、LED が赤色になり、それ以外の場合は緑色になります。(Mac/Linux ではテストしていません)
注:両方のバージョンが機能しています。コメントでの建設的な意見に感謝します。
古いバージョン: https://jsbin.com/mahenes/edit?js,output
また、ここに修正版があります(誰かがMacでテストして確認できますか)
新しいバージョン: https://jsbin.com/xiconuv/edit?js,output
新しいバージョン:
function isCapslock(e) {
const IS_MAC = /Mac/.test(navigator.platform);
const charCode = e.charCode;
const shiftKey = e.shiftKey;
if (charCode >= 97 && charCode <= 122) {
capsLock = shiftKey;
} else if (charCode >= 65 && charCode <= 90
&& !(shiftKey && IS_MAC)) {
capsLock = !shiftKey;
}
return capsLock;
}
古いバージョン:
function isCapslock(e) {
e = (e) ? e : window.event;
var charCode = false;
if (e.which) {
charCode = e.which;
} else if (e.keyCode) {
charCode = e.keyCode;
}
var shifton = false;
if (e.shiftKey) {
shifton = e.shiftKey;
} else if (e.modifiers) {
shifton = !!(e.modifiers & 4);
}
if (charCode >= 97 && charCode <= 122 && shifton) {
return true;
}
if (charCode >= 65 && charCode <= 90 && !shifton) {
return true;
}
return false;
}
国際文字の場合、必要に応じて次のキーのチェックを追加できます。関心のある文字のキーコード範囲を取得する必要があります。おそらく、対処しているすべての有効なユース ケース キーを保持するキーマッピング配列を使用することによって可能です...
大文字の A ~ Z または 'Ä'、'Ö'、'Ü'、小文字の a ~ Z または 0 ~ 9 または 'ä'、'ö'、'ü'
上記のキーは単なるサンプル表現です。