Мне любопытно, как я, с помощью следующего кода плагина jQuery, который я пишу в конце этого вопроса, могу реализовать комбинации клавиш. Как это работает до сих пор, это позволяет пользователю создавать ключевые команды, просто выполняя обычный синтаксис, подобный jQuery, и предоставлять событие для ключевой команды, например:
$(window).jkey('a',function(){
alert('you pressed the a key!');
});
или
$(window).jkey('b c d',function(){
alert('you pressed either the b, c, or d key!');
});
, и, наконец, то, что я хочу, - это возможность делаю, но не могу понять:
$(window).jkey('alt+n',function(){
alert('you pressed alt+n!');
});
Я знаю, как это сделать за пределами плагина (при нажатии на клавиатуре установите значение переменной false, а при нажатии на кнопку установите значение переменной true и проверьте, верно ли значение переменной при нажатии другой клавиши) , но я не знаю, как это сделать, если вы не знаете, какие клавиши и сколько будут нажиматься. Как мне добавить эту поддержку? Я хочу, чтобы они могли делать такие вещи, как alt + shift + a
или a + s + d + f
, если они этого захотят. Я просто не могу понять, как это реализовать. Любые идеи?
Я собираюсь выпустить это как плагин с открытым исходным кодом, и я хотел бы дать всем, кто дает мне право, работать, немного похвалы в сообщении в блоге и в собственном коде. Заранее спасибо!
(function($) {
$.fn.jkey = function(keyCombo,callback) {
if(keyCombo.indexOf(' ') > -1){ //If multiple keys are selected
var keySplit = keyCombo.split(' ');
}
else{ //Else just store this single key
var keySplit = [keyCombo];
}
for(x in keySplit){ //For each key in the array...
if(keySplit[x].indexOf('+') > -1){
//Key selection by user is a key combo... what now?
}
else{
//Otherwise, it's just a normal, single key command
}
switch(keySplit[x]){
case 'a':
keySplit[x] = 65;
break;
case 'b':
keySplit[x] = 66;
break;
case 'c':
keySplit[x] = 67;
break;
//And so on for all the rest of the keys
}
}
return this.each(function() {
$this = $(this);
$this.keydown(function(e){
if($.inArray(e.keyCode, keySplit) > -1){ //If the key the user pressed is matched with any key the developer set a key code with...
if(typeof callback == 'function'){ //and they provided a callback function
callback(); //trigger call back and...
e.preventDefault(); //cancel the normal
}
}
});
});
}
})(jQuery);