Определяем "коды клавиш браузера" или почему F1 = 112, а не 59
Вопрос был примерно таким, воспользуюсь им как поводом для задачи:
Почему в DOS код клавиши F1 - 59, а в Windows - 112, и можно ли обрабатывать коды клавиш кроссплатформенно?
Отличаются ли, например, коды клавиш браузера и программы на C#?
а источником послужило, похоже, вот это приложение к старому паскалевскому учебнику.
В принципе, по ссылке как раз уже и написан ответ, но если пояснить подробней, то скан-код нажатия у клавиши F1 = 0x3B = 59, а ASCII-код как раз = 0x70 = 112, он - вполне "кроссплатформенный" и может использоваться одинаково в самых различных системах программирования, от бразуеров / HTML / Javascript до компонентных библиотек вроде VCL или .NET.
При этом работать с кодами клавиш в онлайн-приложении нам будет не сложнее, чем в stand-alone программах.
Достаточно назначить нужному элементу HTML (или всему телу документа <BODY>
) обработчик одного из событий клавиатуры (функцию с параметром-объектом e
, содержащим информацию о событии), затем отменить, при необходимости, стандартную обработку, чтобы браузер не "забирал себе" клавиши и, наконец, работать со значением e.keycode
:
var body = document.querySelector('body'); body.onkeydown = function (e) { if ( !e.metaKey ) { //если не зажата клавиша e.preventDefault(); //отменить обработку по умолчанию } var s = '<p>Десятичный код: ' + e.keyCode + "</p>\n"; s += '<p>16-ричный код: ' + '0x'+parseInt(e.keyCode).toString(16) + "</p>\n"; s += '<p>Описание: ' + keyCodes[e.keyCode] || 'неизвестный код... расскажите о нём кому-нибудь :)' + "</p>\n"; document.getElementById('keyInfoId').innerHTML = s; };
По сути, это почти весь исходник яваскрипт-сервиса для получения кодов клавиш, не хватает только объекта keyCodes
с текстовыми описаниями названий клавиш, его легко получить из исходника страницы со скриптом, показанным далее в работе.
Для безопасности сервис работает на отдельной странице, в Internet Explorer тоже должно выполняться.
Коды клавиш бразуеров, HTML, DOM, Javascript, открыть сервис в новом окне (вкладке)
06.01.2018, 13:57 [2944 просмотра]