JavaScript. Подробное руководство, 6-е издание, стр. 271

В примере 17.8 определяется класс

<b>Keymар</b>
, который отображает идентификаторы комбинаций клавиш, такие как «PageUp», «Alt_Z» и «ctrl+alt+shift+F5» в функции на языке JavaScript, вызываемые в ответ на нажатия этих комбинаций. Определения привязок клавиш передаются конструктору
<b>Кеуmap</b>
() в форме объекта JavaScript, имена свойств которого соответствуют идентификаторам комбинаций клавиш, а значения этих свойств содержат ссылки на функции-обработчики. Добавление и удаление привязок осуществляется с помощью методов
<b>bind</b>
() и
<b>unbind()</b>
. Устанавливается объект
<b>Key</b>
тар в HTML-элемент (обычно в объект
<b>Document</b>
) с помощью метода
<b>install().</b>
При установке объекта
<b>Кеуmар</b>
в этом элементе регистрируется обработчик события «keydown». Каждый раз, когда нажимается клавиша, обработчик проверяет наличие функции, соответствующей этой комбинации. Если функция существует, она вызывается. Обработчик события «keydown» использует свойство
<b>key</b>
, определяемое стандартом «DOM Level 3 Events», если оно существует. В противном случае он пытается использовать Webkit-свойство
<b>keyldentifіег</b>
. И как запасной вариант, обработчик использует нестандартно свойство
<b>keyCode</b>
. Пример 17.8 начинается с длинного комментария, подробно описывающего работу модуля.

Пример 17.8. Класс Key тар для обработки нажатий комбинаций клавиш

<b>/*</b>

<b>* Keymap.js: связывает события клавиатуры с функциями-обработчиками.</b>

<b>*</b>

<b>* Этот модуль определяет класс Keymap. Экземпляр этого класса представляет</b>

<b>* собой отображение идентификаторов комбинаций клавиш (определяемых ниже)</b>

<b>* в функции-обработчики. Объект Keymap можно установить в HTML-элемент</b>

<b>* для обработки событий keydown. Когда возникает это событие, объект Keymap</b>

<b>* использует свою карту привязок для вызова соответствующего обработчика.</b>

<b>*</b>

<b>* При создании объекта Keymap конструктору можно передать JavaScript-объект,</b>

<b>* представляющий начальную карту привязок. Имена свойств этого объекта должны</b>

<b>* соответствовать идентификаторам клавиш, а значениями должны быть функции-обработчики.</b>

<b>* После создания объекта Keymap в него можно добавлять новые привязки, передавая</b>

<b>* идентификатор клавиши и функцию-обработчик методу bind(). Имеется также возможность</b>

<b>* удалить привязку, передав идентификатор клавиши методу unbind().</b>

<b>*</b>

<b>* Чтобы задействовать объект Keymap, следует вызвать его метод install(), передав ему</b>

<b>* HTML-элемент, такой как объект document. Метод install() добавит в указанный объект</b>

<b>* обработчик события onkeydown. Когда этот обработчик будет вызван, он определит</b>

<b>* идентификатор нажатой клавиши и вызовет функцию-обработчик (если таковая имеется),</b>

<b>* привязанную к этому идентификатору клавиши. Один и тот же объект Keymap</b>

<b>* можно установить сразу в несколько HTML-элементов.</b>

<b>*</b>

<b>* Идентификаторы клавиш</b>

<b>*</b>

<b>* Идентификатор клавиши - это нечувствительная к регистру символов строка,</b>

<b>* представляющая клавишу, плюс любое количество удерживаемых нажатыми</b>

<b>* клавиш-модификаторов. Именем клавиши является основной текст, изображаемый</b>

<b>* на клавише. Допустимыми именами клавиш являются: &quot;А&quot;, &quot;7&quot;, &quot;F2&quot;, &quot;PageUp&quot;,</b>

<b>* &quot;Left&quot;, &quot;Backspace&quot; и &quot;Esc&quot;.</b>

<b>*</b>

<b>* Список имен находится в объекте Keymap.keyCodeToKeyName, внутри этого модуля.</b>

<b>* Они являются подмножеством имен, определяемых стандартом &quot;DOM Level 3&quot;.</b>

<b>* Кроме того, этот класс будет использовать свойство key, когда оно будет реализовано.</b>

<b>*</b>

<b>* Идентификатор клавиши может также включать имена клавиш-модификаторов.</b>

<b>* Это имена Alt, Ctrl, Meta и Shift. Они нечувствительны к регистру символов и должны</b>

<b>* отделяться от имени клавиши и друг от друга пробелами или подчеркиваниями, дефисами</b>

<b>* или знаками +. Например: &quot;SHIFT+A”, &quot;Alt_F2&quot;, &quot;meta-v&quot; и &quot;Ctrl alt left&quot;.</b>

<b>* В компьютерах Mac клавише Meta соответствует клавиша Command, а клавише Alt -</b>

<b>* клавиша Option. Некоторые броузеры отображают клавишу Windows в клавишу Meta.</b>

<b>*</b>

<b>* Функции-обработчики</b>

<b>*</b>

<b>* Обработчики вызываются как методы объекта document или элемента документа,</b>

<b>* в зависимости от того, куда был установлен объект Keymap, и им передаются</b>

<b>* два аргумента:</b>

<b>* 1) объект события keydown</b>