- accordion(1)
- active-trail(1)
- ajax(1)
- angular(1)
- apache(3)
- bash(4)
- block(2)
- browsers(1)
- button styles(1)
- checkboxes(1)
- code key(1)
- compress(1)
- console(4)
- css(1)
- ctools(1)
- date(1)
- db_query(2)
- db_select(2)
- debian(1)
- dom function(1)
- drag and drop(1)
- drupal 6(3)
- drupal 7(3)
- drupal functions(6)
- drupal_goto()(1)
- drupal_mail(1)
- errors(1)
- eslint(1)
- fancybox(1)
- fedora(1)
- firefox(2)
- firefox addons(1)
- firefox profiles(1)
- form(1)
- form api(5)
- format_date(1)
- git(1)
- hooks(2)
- hook_mail(1)
- hook_theme(1)
- hotkey(1)
- httpd(1)
- husky(1)
- ie(2)
- javascript(2)
- jquery(7)
- jquery plugin(2)
- jquery regex(1)
- js templates(1)
- kb(1)
- like button(1)
- link(1)
- linux(4)
- linux commands(2)
- list(1)
- list styles(1)
- markup(1)
- menu(3)
- mobile(1)
- modal(2)
- module develop(2)
- modules(1)
- monorepo(1)
- mootools(1)
- mysql(2)
- node_save(1)
- opacity(1)
- opensuse(5)
- opera mini(1)
- padStart(1)
- page.tpl.php(1)
- password hash(1)
- patch(1)
- pdf(1)
- python(1)
- radiobuttons(1)
- reg_ex(2)
- sass(1)
- scripts(1)
- search form(1)
- selenium(1)
- share button(1)
- sms(1)
- ssh(2)
- styles(4)
- switch case(1)
- table style(1)
- tar(1)
- taxonomy(1)
- taxonomy menu(1)
- templates(1)
- theme(4)
- toggle(2)
- touchpad(1)
- tray(1)
- trigger(1)
- typescript(2)
- typescript-eslint(1)
- ubuntu(3)
- usefull function(1)
- views(1)
- virtual hosts(2)
- virtualbox(2)
- vmware(1)
- webdriver(1)
- youtube(1)
- кроссбраузерность(1)
Hotkeys комбинация клавиш
Будет в виде модуля, для евентовой модели.
Основная суть здесь вот в чем, имеем массив, в который будем добавлять клавиши по keydown, и удалять по keyup, то есть пока клавиша зажата она будет в массиве и мы можем посмотреть какая комбинация сейчас нажата.
ZERO, для бага в хроме.
APP.hotKeys = function () {
'use strict';
var init = function () {
$(document).bind('keydown', hotKeyHandler);
$(document).bind('keyup', removeKeyUp);
},
ZERO = 0,
ESC_KEY = 27,
CTRL_KEY = 17,
ALT_KEY = 18,
SHIFT_KEY = 16,
ENTER_KEY = 13,
SPACE = 32,
RIGHT_KEY = 39,
LEFT_KEY = 37,
UP_KEY = 38,
DOWN_KEY = 40,
M = 77,
A = 65,
S = 83,
F = 70,
keys = [],
hotKeyHandler = function (e) {
e = e || window.event;
var codeKey = e.which || e.keyCode;
keys[codeKey] = true;
//esc
if (codeKey === ESC_KEY) {
$('body').trigger('escKeyUp');
e.preventDefault();
//enter
} else if (codeKey === ENTER_KEY) {
$('body').trigger('enterKeyUp');
// e.preventDefault();
//CTRL + SHIFT + M
} else if ((keys[CTRL_KEY] || keys[ZERO]) && (keys[SHIFT_KEY] || keys[ZERO]) && keys[M]) {
$('body').trigger('comboCtrlShiftMKeyUp', {codeKey: codeKey});
e.preventDefault();
//CTRL + SHIFT + A
} else if ((keys[CTRL_KEY] || keys[ZERO]) && (keys[SHIFT_KEY] || keys[ZERO]) && keys[A]) {
$('body').trigger('comboCtrlShiftAKeyUp', {codeKey: codeKey});
e.preventDefault();
//CTRL + SHIFT + F
} else if ((keys[CTRL_KEY] || keys[ZERO]) && (keys[SHIFT_KEY] || keys[ZERO]) && keys[F]) {
$('body').trigger('comboCtrlShiftFKeyUp', {codeKey: codeKey});
e.preventDefault();
//CTRL + UPKEY
} else if ((keys[CTRL_KEY] || keys[ZERO]) && (keys[UP_KEY] || keys[ZERO])) {
$('body').trigger('comboCtrlUpKeyUp', {codeKey: codeKey});
e.preventDefault();
//CTRL + DOWNKEY
} else if ((keys[CTRL_KEY] || keys[ZERO]) && (keys[DOWN_KEY] || keys[ZERO])) {
$('body').trigger('comboCtrlDownKeyUp', {codeKey: codeKey});
e.preventDefault();
//CTRL + LEFTKEY
} else if ((keys[CTRL_KEY] || keys[ZERO]) && (keys[LEFT_KEY] || keys[ZERO])) {
$('body').trigger('comboCtrlLeftKeyUp', {codeKey: codeKey});
e.preventDefault();
//CTRL + RIGHTKEY
} else if ((keys[CTRL_KEY] || keys[ZERO]) && (keys[RIGHT_KEY] || keys[ZERO])) {
$('body').trigger('comboCtrlRightKeyUp', {codeKey: codeKey});
e.preventDefault();
//SPACE
}
codeKey = null;
},
removeKeyUp = function(e) {
var codeKey = e.which || e.keyCode;
if (keys[ZERO]) {
delete keys[ZERO];
}
delete keys[codeKey];
};
return {
init: init
};
}();
'use strict';
var init = function () {
$(document).bind('keydown', hotKeyHandler);
$(document).bind('keyup', removeKeyUp);
},
ZERO = 0,
ESC_KEY = 27,
CTRL_KEY = 17,
ALT_KEY = 18,
SHIFT_KEY = 16,
ENTER_KEY = 13,
SPACE = 32,
RIGHT_KEY = 39,
LEFT_KEY = 37,
UP_KEY = 38,
DOWN_KEY = 40,
M = 77,
A = 65,
S = 83,
F = 70,
keys = [],
hotKeyHandler = function (e) {
e = e || window.event;
var codeKey = e.which || e.keyCode;
keys[codeKey] = true;
//esc
if (codeKey === ESC_KEY) {
$('body').trigger('escKeyUp');
e.preventDefault();
//enter
} else if (codeKey === ENTER_KEY) {
$('body').trigger('enterKeyUp');
// e.preventDefault();
//CTRL + SHIFT + M
} else if ((keys[CTRL_KEY] || keys[ZERO]) && (keys[SHIFT_KEY] || keys[ZERO]) && keys[M]) {
$('body').trigger('comboCtrlShiftMKeyUp', {codeKey: codeKey});
e.preventDefault();
//CTRL + SHIFT + A
} else if ((keys[CTRL_KEY] || keys[ZERO]) && (keys[SHIFT_KEY] || keys[ZERO]) && keys[A]) {
$('body').trigger('comboCtrlShiftAKeyUp', {codeKey: codeKey});
e.preventDefault();
//CTRL + SHIFT + F
} else if ((keys[CTRL_KEY] || keys[ZERO]) && (keys[SHIFT_KEY] || keys[ZERO]) && keys[F]) {
$('body').trigger('comboCtrlShiftFKeyUp', {codeKey: codeKey});
e.preventDefault();
//CTRL + UPKEY
} else if ((keys[CTRL_KEY] || keys[ZERO]) && (keys[UP_KEY] || keys[ZERO])) {
$('body').trigger('comboCtrlUpKeyUp', {codeKey: codeKey});
e.preventDefault();
//CTRL + DOWNKEY
} else if ((keys[CTRL_KEY] || keys[ZERO]) && (keys[DOWN_KEY] || keys[ZERO])) {
$('body').trigger('comboCtrlDownKeyUp', {codeKey: codeKey});
e.preventDefault();
//CTRL + LEFTKEY
} else if ((keys[CTRL_KEY] || keys[ZERO]) && (keys[LEFT_KEY] || keys[ZERO])) {
$('body').trigger('comboCtrlLeftKeyUp', {codeKey: codeKey});
e.preventDefault();
//CTRL + RIGHTKEY
} else if ((keys[CTRL_KEY] || keys[ZERO]) && (keys[RIGHT_KEY] || keys[ZERO])) {
$('body').trigger('comboCtrlRightKeyUp', {codeKey: codeKey});
e.preventDefault();
//SPACE
}
codeKey = null;
},
removeKeyUp = function(e) {
var codeKey = e.which || e.keyCode;
if (keys[ZERO]) {
delete keys[ZERO];
}
delete keys[codeKey];
};
return {
init: init
};
}();