Определение состояния Caps Lock — это клиентская задача, которая решается средствами JavaScript в браузере. В Node.js (серверной среде) это невозможно без интеграции с системными API, так как сервер не имеет доступа к состоянию клавиатуры клиента.
Самый распространённый способ — анализ введённого символа при событии keypress
:
document.addEventListener('keypress', (e) => {
const isCapsOn = e.getModifierState('CapsLock');
console.log(`Caps Lock ${isCapsOn ? 'ВКЛ' : 'ВЫКЛ'}`);
});
Для события keyup
/keydown
можно использовать:
document.addEventListener('keydown', (e) => {
if (e.key === 'CapsLock') {
// Обработка переключения Caps Lock
console.log('Состояние CapsLock изменилось');
}
});
Пример реализации UI-уведомления:
<input type="text" id="textInput" placeholder="Проверка Caps Lock">
<div id="capsWarning" style="color: red; display: none;">Внимание: Caps Lock включён!</div>
<script>
const input = document.getElementById('textInput');
const warning = document.getElementById('capsWarning');
input.addEventListener('keyup', (e) => {
if (e.getModifierState('CapsLock')) {
warning.style.display = 'block';
} else {
warning.style.display = 'none';
}
});
</script>
getModifierState()
работает во всех современных браузерахЕсли всё же нужно реализовать это в Node.js (например для десктоп-приложения через Electron):
// Только в Electron или NW.js
const { app, BrowserWindow } = require('electron');
app.whenReady().then(() => {
const win = new BrowserWindow();
win.webContents.on('key-up', (event, key) => {
if (key === 'CapsLock') {
console.log('CapsLock pressed');
}
});
});
Анализ введённого текста:
function checkCapsLock(str) {
return str === str.toUpperCase() && str !== str.toLowerCase();
}
Использование библиотек: Для сложных кейсов можно использовать специализированные библиотеки:
npm install caps-state
В браузере состояние Caps Lock определяется через getModifierState()
или анализ событий клавиатуры. В чистом Node.js это невозможно без интеграции с GUI-фреймворками (Electron). Наиболее надёжный способ — клиентская проверка с визуальным уведомлением пользователя.