Мне любопытно, как я, используя следующий код плагина 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!');
});
Я знаю, как сделать это вне плагина (на keyup установите var false и на keydownустановите var true и проверьте, является ли var 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);