Чтение онлайн

на главную - закладки

Жанры

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];

Поделиться:
Популярные книги

Я уже царь. Книга XXIX

Дрейк Сириус
29. Дорогой барон!
Фантастика:
юмористическое фэнтези
аниме
попаданцы
5.00
рейтинг книги
Я уже царь. Книга XXIX

Подросток

Достоевский Федор Михайлович
Проза:
русская классическая проза
9.09
рейтинг книги
Подросток

Товарищ "Чума" 6

lanpirot
6. Товарищ "Чума"
Фантастика:
городское фэнтези
попаданцы
альтернативная история
5.00
рейтинг книги
Товарищ Чума 6

Сирийский рубеж 3

Дорин Михаил
7. Рубеж
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Сирийский рубеж 3

Локки 4 Потомок бога

Решетов Евгений Валерьевич
4. Локки
Фантастика:
аниме
фэнтези
5.00
рейтинг книги
Локки 4 Потомок бога

Алые перья стрел

Крапивин Владислав Петрович
Детские:
детские приключения
8.58
рейтинг книги
Алые перья стрел

Некромант

Щепетнов Евгений Владимирович
4. Петр Синельников
Фантастика:
боевая фантастика
6.20
рейтинг книги
Некромант

На границе империй. Том 10. Часть 5

INDIGO
23. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 10. Часть 5

Барон. Книга вторая

Первухин Андрей Евгеньевич
6. Ученик
Фантастика:
фэнтези
попаданцы
5.40
рейтинг книги
Барон. Книга вторая

Эфемер

Прокофьев Роман Юрьевич
7. Стеллар
Фантастика:
боевая фантастика
рпг
7.23
рейтинг книги
Эфемер

Майами

Фишер Марк
Детективы:
триллеры
6.40
рейтинг книги
Майами

Чужак

Листратов Валерий
1. Ушедший Род
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Чужак

Старая школа рул

Ромов Дмитрий
1. Второгодка
Фантастика:
альтернативная история
6.00
рейтинг книги
Старая школа рул

Требую развода! Что значит- вы отказываетесь?

Мамлеева Наталья
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Требую развода! Что значит- вы отказываетесь?