JavaScript. Подробное руководство, 6-е издание
Шрифт:
* используются самой операционной системой (например, Alt-F4). А некоторые комбинации
* могут перехватываться броузером (например, Ctrl-S). Эта реализация зависит
* от особенностей броузера, ОС и региональных настроек. Вы с успехом можете
* использовать функциональные клавиши и функциональные клавиши с модификаторами,
* а также алфавитно-цифровые
клавиши без модификаторов. Комбинации алфавитно-цифровых
* клавиш с модификаторами Ctrl и Alt менее надежны.
*
* Поддерживается большинство знаков препинания, кроме дефиса, для ввода которых
* не требуется удерживать клавишу Shift ('=[];',./\) на клавиатурах
* со стандартной раскладкой US. Но они плохо совместимы с другими
* раскладками клавиатур, и их желательно не использовать.
*/
// Функция-конструктор
function Keymap(bindings) {
this.map = {}; // Определить отображение идентификатор->обработчик
if (bindings) { // Скопировать в него начальную карту привязок
for(name in bindings) this.bind(name, bindings[name]);
}
}
// Связывает указанный идентификатор клавиши с указанной функцией-обработчиком
Keymap.prototype.bind = function(key, func) {
this.map[Keymap.normalize(key)] = func;
};
// Удаляет привязку для указанного идентификатора клавиши
Keymap
.prototype.unbind = function(key) {
delete this.map[Keymap.normalize(key)];
};
// Устанавливает этот объект Keymap в указанный HTML-элемент
Keymap.prototype.install = function(element) {
var
keymap
= this;
// Определить функции-обработчика события
function handler(event) { return keymap.dispatch(event, element); }
//
Установить ее
if (element.addEventListener)
element.addEventListener("keydown", handler, false);
else
if (element.attachEvent)
element.attachEvent("onkeydown", handler);
};
// Этот метод делегирует обработку события клавиатуры, опираясь на привязки.
Keymap.prototype.dispatch = function(event, element) {
// Изначально нет ни имен клавиш-модификаторов, ни имени клавиши
var modifiers = ""
var keyname = null;
// Сконструировать строки модификаторов в каноническом виде из символов
// в нижнем регистре, расположив их в алфавитном порядке.
if (event.altKey) modifiers += "alt_”;
if (event.ctrlKey) modifiers += "Ctrl,";
if (event.metaKey) modifiers += "meta_";
if (event.shiftKey) modifiers += "shift.”;
// Имя клавиши легко получить, если реализовано свойство key,
// определяемое стандартом DOM Level 3:
if (event.key) keyname = event.key;
// Для получения имен функциональных клавиш в Safari и Chrome можно
// использовать свойство keyldentifier
else
if (event. keyldentifier&&event. keyldentifier. substrings, 2) !== "U+")
keyname = event.keyldentifier;
// В противном случае можно использовать свойство keyCode и отображение код->имя ниже
else
keyname = Keymap.keyCodeToKeyName[event.keyCode];
Поделиться:
Популярные книги
Эммануэль
1. Эммануэль
Любовные романы:
эро литература
7.38
рейтинг книги
Неучтенный элемент. Том 11
11. Антимаг. Вне системы
Фантастика:
фэнтези
5.00
рейтинг книги
Двойник Короля 5
5. Двойник Короля
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Инженер Петра Великого 5
5. Инженер Петра Великого
Фантастика:
попаданцы
альтернативная история
фэнтези
4.75
рейтинг книги
Хозяин Стужи 8
8. Злой Лед
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Гамбургский счет: Статьи – воспоминания – эссе (1914–1933)
Научно-образовательная:
история
5.00
рейтинг книги
Врубель
Жизнь в искусстве
Документальная литература:
биографии и мемуары
5.00
рейтинг книги
Ведун
1. Второй шанс
Фантастика:
фэнтези
боевая фантастика
альтернативная история
5.00
рейтинг книги
Телохранитель Генсека. Том 1
1. Медведев
Фантастика:
попаданцы
альтернативная история
7.00
рейтинг книги
Адвокат
1. Бандитский Петербург
Детективы:
боевики
8.00
рейтинг книги
Путь к бессмертию 1
1. Девятихвостый Богатырь
Фантастика:
попаданцы
сказочная фантастика
фэнтези
5.00
рейтинг книги
Бастард Императора. Том 2
2. Бастард Императора
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Зодчий. Книга V
5. Зодчий Империи
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Ваше Сиятельство 6
6. Ваше Сиятельство
Фантастика:
попаданцы
аниме
5.00